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()
для извлечения дня