PySpark中如何将yyyyMM格式整数日期转换为月末日期?
在PySpark中将yyyyMM格式整数日期转换为月末日期
可以通过PySpark内置的日期函数快速实现这个需求,以下是两种简洁的解法:
方法1:直接转换格式后取月末
利用to_date将整数转为yyyyMM格式的日期(默认解析为当月第一天),再通过last_day获取月末日期:
from pyspark.sql import SparkSession from pyspark.sql.functions import col, to_date, last_day # 创建测试DataFrame spark = SparkSession.builder.appName("MonthEndConversion").getOrCreate() data = [(202201,), (202202,), (202203,), (202212,)] df = spark.createDataFrame(data, ["int_date"]) # 转换逻辑 df_result = df.withColumn( "month_end_date", last_day(to_date(col("int_date").cast("string"), "yyyyMM")) ) df_result.show()
输出结果:
+--------+-------------+ |int_date|month_end_date| +--------+-------------+ | 202201| 2022-01-31| | 202202| 2022-02-28| | 202203| 2022-03-31| | 202212| 2022-12-31| +--------+-------------+
方法2:构造当月第一天再取月末
如果需要更明确的步骤,可以先拼接出当月第一天的字符串,再转换为日期后取月末:
from pyspark.sql.functions import concat, lit df_result = df.withColumn( "month_end_date", last_day(to_date(concat(col("int_date").cast("string"), lit("01")), "yyyyMMdd")) )
注意事项
- 确保整数列的格式严格为
yyyyMM,若存在不符合格式的数值,to_date会返回null,可配合coalesce函数处理异常值 last_day函数在PySpark 2.0及以上版本均支持,兼容性良好
内容的提问来源于stack exchange,提问作者sparc
相关产品推荐
相关产品推荐

