Skip to content

first_value(col[, ignoreNulls])

Описание

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

Параметры

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

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

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

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

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

# Создаем SparkSession
spark = SparkSession.builder.appName("first_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(
    "first_value",
    first_value("value").over(window)
).withColumn(
    "first_non_null",
    first_value("value", ignoreNulls=True).over(window)
).show()

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

Примечания

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