Skip to content

last_value(col[, ignoreNulls])

Описание

Функция last_value() возвращает последнее значение столбца для группы строк с учетом порядка. Это оконная функция, которая должна использоваться с window().

Параметры

  • col: Column - столбец для получения последнего значения
  • ignoreNulls: Boolean (опционально) - если TRUE, то NULL значения игнорируются, по умолчанию FALSE

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

Тип значения из столбца col - последнее значение в окне

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

from pyspark.sql.functions import last_value, window
from pyspark.sql import SparkSession
from pyspark.sql.window import Window

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

# Создаем DataFrame
data = [
    ("A", 1, "2023-01-01"),
    ("A", 2, "2023-01-02"),
    ("A", 3, "2023-01-03"),
    ("B", None, "2023-01-01"),
    ("B", 4, "2023-01-02"),
    ("B", 5, "2023-01-03"),
    ("B", 6, "2023-01-04")
]
df = spark.createDataFrame(data, ["group", "value", "date"])

# Создаем окно
window = Window.partitionBy("group").orderBy("date")

# Получаем последнее значение
result = df.withColumn(
    "last_value",
    last_value("value").over(window)
).withColumn(
    "last_non_null",
    last_value("value", ignoreNulls=True).over(window)
).show()

# Результат:
# +-----+-----+----------+----------+--------------+
# |group|value|date      |last_value|last_non_null |
# +-----+-----+----------+----------+--------------+
# |A    |1    |2023-01-01|1         |1             |
# |A    |2    |2023-01-02|2         |2             |
# |A    |3    |2023-01-03|3         |3             |
# |B    |null |2023-01-01|null      |4             |
# |B    |4    |2023-01-02|4         |4             |
# |B    |5    |2023-01-03|5         |5             |
# |B    |6    |2023-01-04|6         |6             |
# +-----+-----+----------+----------+--------------+

Примечания

  • Без параметра ignoreNulls функция вернет последнее значение, даже если оно NULL
  • С ignoreNulls=True функция пропустит NULL значения и вернет последнее ненулевое значение
  • Для получения первого значения используйте first_value()
  • Для получения последнего значения без учета порядка используйте last()