Skip to content

trunc(date, format)

Описание

Функция trunc() обрезает дату до указанной единицы времени (год, квартал, месяц, неделя).

Параметры

  • date: Column - столбец с датами
  • format: String - единица времени для обрезки ('year', 'quarter', 'month', 'week')

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

Date - обрезанная дата

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

from pyspark.sql.functions import trunc
from pyspark.sql import SparkSession
from datetime import datetime

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

# Создаем DataFrame с датами
data = [
    (datetime(2023, 1, 15),),   # 15 января
    (datetime(2023, 4, 15),),   # 15 апреля
    (datetime(2023, 7, 15),),   # 15 июля
    (datetime(2023, 10, 15),)   # 15 октября
]
df = spark.createDataFrame(data, ["date"])

# Обрезаем даты до разных единиц времени
result = df.select(
    "date",
    trunc("date", "year").alias("year"),
    trunc("date", "quarter").alias("quarter"),
    trunc("date", "month").alias("month"),
    trunc("date", "week").alias("week")
).show(truncate=False)

# Результат:
# +-------------------+----------+------------+----------+----------+
# |date               |year      |quarter     |month     |week      |
# +-------------------+----------+------------+----------+----------+
# |2023-01-15 00:00:00|2023-01-01|2023-01-01 |2023-01-01|2023-01-09|
# |2023-04-15 00:00:00|2023-01-01|2023-04-01 |2023-04-01|2023-04-10|
# |2023-07-15 00:00:00|2023-01-01|2023-07-01 |2023-07-01|2023-07-10|
# |2023-10-15 00:00:00|2023-01-01|2023-10-01 |2023-10-01|2023-10-09|
# +-------------------+----------+------------+----------+----------+

Примечания

  • NULL значения возвращают NULL
  • Доступные форматы:
  • 'year' - обрезает до начала года
  • 'quarter' - обрезает до начала квартала
  • 'month' - обрезает до начала месяца
  • 'week' - обрезает до начала недели (понедельник)
  • Для работы с датами также используйте:
  • date_trunc() для обрезки временных меток
  • year() для извлечения года
  • month() для извлечения месяца
  • quarter() для извлечения квартала
  • dayofweek() для извлечения дня недели