Skip to content

months_between(end_date, start_date)

Описание

Функция months_between() вычисляет разницу в месяцах между двумя датами.

Параметры

  • end_date: Column - столбец с конечными датами
  • start_date: Column - столбец с начальными датами

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

Double - количество месяцев между датами (end_date - start_date)

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

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

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

# Создаем DataFrame с парами дат
data = [
    (datetime(2023, 2, 15), datetime(2023, 1, 15)),   # 1 месяц
    (datetime(2023, 12, 31), datetime(2023, 1, 1)),   # ~12 месяцев
    (datetime(2024, 1, 15), datetime(2023, 1, 15))    # 12 месяцев
]
df = spark.createDataFrame(data, ["end_date", "start_date"])

# Вычисляем разницу в месяцах между датами
result = df.select(
    "start_date",
    "end_date",
    months_between("end_date", "start_date").alias("months_diff")
).show(truncate=False)

# Результат:
# +-------------------+-------------------+-----------+
# |start_date         |end_date           |months_diff|
# +-------------------+-------------------+-----------+
# |2023-01-15 00:00:00|2023-02-15 00:00:00|1.0        |
# |2023-01-01 00:00:00|2023-12-31 00:00:00|11.96774194|
# |2023-01-15 00:00:00|2024-01-15 00:00:00|12.0       |
# +-------------------+-------------------+-----------+

Примечания

  • NULL значения возвращают NULL
  • Результат может быть отрицательным, если end_date раньше start_date
  • Функция учитывает количество дней в месяце:
  • Если обе даты - последние дни своих месяцев, результат будет целым числом
  • В остальных случаях результат будет дробным числом, учитывающим разницу в днях
  • Для работы с датами также используйте:
  • date_add() для добавления дней
  • date_sub() для вычитания дней
  • datediff() для вычисления разницы между датами
  • add_months() для добавления месяцев
  • year() для извлечения года
  • month() для извлечения месяца
  • day() для извлечения дня