如何在PySpark中合并Month与Year列生成对应每月1号的Date列
报错原因
你调用concat_ws时传入的固定日数1是Python原生整数类型,不属于PySpark支持的列对象或者字符串常量,同时你代码中引用的列名month/year是小写,和原始DataFrame的大写列名Month/Year不匹配,两个问题共同导致报错。另外你原有写法给拼接列起别名Month会和原有列重名,也会引发后续逻辑异常。
解决方法
方法1:修复字符串拼接逻辑
使用lit()函数把固定日数1转为PySpark常量列,用withColumn新增Date列,不会打乱原有列的顺序:
from pyspark.sql.functions import concat_ws, lit df = df.withColumn("Date", concat_ws("/", df.Month, lit(1), df.Year))
执行后生成的Date列就是你要求的月/日/年格式字符串,完全匹配预期输出。
方法2:生成日期类型(更适合后续日期计算)
如果后续需要对日期做筛选、区间计算等操作,建议直接生成标准Date类型列,后续需要格式化字符串时再转换即可:
from pyspark.sql.functions import to_date, concat, lit, date_format # 先生成标准日期列 df = df.withColumn("Date", to_date(concat(df.Year, lit("-"), df.Month, lit("-01")))) # 如需转成指定字符串格式,再加这一步 df = df.withColumn("DateStr", date_format("Date", "M/d/yyyy"))
内容的提问来源于stack exchange,提问作者user175025
相关产品推荐
相关产品推荐

