Skip to content

ntile(n)

Описание

Функция ntile() разбивает строки в окне на n примерно равных групп и возвращает номер группы для каждой строки.

Параметры

  • n: Integer - количество групп

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

Integer - номер группы (от 1 до n)

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

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

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

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

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

# Разбиваем на 3 группы
result = df.select(
    "name",
    "value",
    ntile(3).over(window).alias("group")
).show()

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

Примечания

  • Функция должна использоваться с оконной спецификацией
  • Если количество строк не делится нацело на n, первые группы будут содержать на одну строку больше
  • Для вычисления ранга используйте rank()
  • Для вычисления плотного ранга используйте dense_rank()
  • Для получения номера строки используйте row_number()