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()