Skip to content

dense_rank()

Описание

Функция dense_rank() вычисляет плотный ранг значений в окне. Возвращает ранг текущей строки без пропусков в нумерации.

Параметры

Нет параметров

Возвращаемое значение

Long - ранг текущей строки

Пример использования

from pyspark.sql import SparkSession
from pyspark.sql.window import Window
from pyspark.sql.functions import dense_rank

# Создаем SparkSession
spark = SparkSession.builder.appName("dense_rank_example").getOrCreate()

# Создаем DataFrame
data = [
    ("A", 100),
    ("B", 200),
    ("C", 200),
    ("D", 300),
    ("E", 300)
]
df = spark.createDataFrame(data, ["name", "value"])

# Определяем окно
window = Window.orderBy("value")

# Вычисляем плотный ранг
result = df.select(
    "name",
    "value",
    dense_rank().over(window).alias("dense_rank")
).show()

# Результат:
# +----+-----+-----------+
# |name|value|dense_rank |
# +----+-----+-----------+
# |   A|  100|          1|
# |   B|  200|          2|
# |   C|  200|          2|
# |   D|  300|          3|
# |   E|  300|          3|
# +----+-----+-----------+

Примечания

  • Функция должна использоваться с оконной спецификацией
  • При одинаковых значениях присваивается одинаковый ранг
  • Следующий ранг не пропускается (в отличие от rank())
  • Для вычисления ранга с пропусками используйте rank()
  • Для получения номера строки используйте row_number()
  • Для вычисления кумулятивного распределения используйте cume_dist()