Поделиться через


nth_value

Функция окна: возвращает значение, которое является offsetстрокой кадра окна (подсчет от 1), а null также значение, если размер фрейма окна меньше offset строк.

Он вернет offsetзначение, отличное от NULL, которое отображается, если ignoreNulls задано значение true. Если все значения имеют значение NULL, возвращается значение NULL.

Это эквивалентно функции nth_value в SQL.

Синтаксис

from pyspark.sql import functions as sf

sf.nth_value(col, offset, ignoreNulls=False)

Параметры

Параметр Тип Description
col pyspark.sql.Column или имя столбца Имя столбца или выражения.
offset инт Число строк, используемых в качестве значения.
ignoreNulls bool, необязательный Указывает, что значение Nth должно пропускать значение NULL в определении используемой строки.

Возвраты

pyspark.sql.Column: значение nth строки.

Примеры

Пример 1. Получение первого значения в кадре окна

from pyspark.sql import functions as sf
from pyspark.sql import Window
df = spark.createDataFrame(
    [("a", 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["c1", "c2"])
df.show()
+---+---+
| c1| c2|
+---+---+
|  a|  1|
|  a|  2|
|  a|  3|
|  b|  8|
|  b|  2|
+---+---+
w = Window.partitionBy("c1").orderBy("c2")
df.withColumn("nth_value", sf.nth_value("c2", 1).over(w)).show()
+---+---+---------+
| c1| c2|nth_value|
+---+---+---------+
|  a|  1|        1|
|  a|  2|        1|
|  a|  3|        1|
|  b|  2|        2|
|  b|  8|        2|
+---+---+---------+

Пример 2. Получение второго значения в кадре окна

from pyspark.sql import functions as sf
from pyspark.sql import Window
df = spark.createDataFrame(
    [("a", 1), ("a", 2), ("a", 3), ("b", 8), ("b", 2)], ["c1", "c2"])
w = Window.partitionBy("c1").orderBy("c2")
df.withColumn("nth_value", sf.nth_value("c2", 2).over(w)).show()
+---+---+---------+
| c1| c2|nth_value|
+---+---+---------+
|  a|  1|     NULL|
|  a|  2|        2|
|  a|  3|        2|
|  b|  2|     NULL|
|  b|  8|        8|
+---+---+---------+