如何使用PySpark通过withColumn计算两个日期列的天数差
PySpark计算M/d/yy格式两日期列天数差的实现方案
你之前出现报错大概率是因为待计算的两个日期列为字符串类型,未转为Spark支持的日期类型就直接做数值运算导致的,以下是符合withColumn调用要求的完整实现:
实现步骤
- 导入依赖的Spark SQL函数
from pyspark.sql.functions import to_date, datediff
- 确认日期格式匹配规则:你给出的示例格式
5/12/21为月/日/两位年,对应Spark日期格式串为M/d/yy;如果实际是日/月/两位年的格式,将格式串替换为d/M/yy即可。 - 使用
withColumn完成类型转换与差值计算
假设你的原始DataFrame名为df,两个日期字符串列的列名为date1、date2,可直接参考以下代码:
result_df = df.withColumn("date1", to_date("date1", "M/d/yy")) \ .withColumn("date2", to_date("date2", "M/d/yy")) \ .withColumn("diff_result", datediff("date1", "date2"))
结果说明
datediff函数的参数规则为datediff(结束日期, 起始日期),刚好符合date1 - date2的计算逻辑,返回的diff_result字段本身就是整数类型,你可以执行result_df.printSchema()验证字段类型为IntegerType,符合输出要求。
内容的提问来源于stack exchange,提问作者datatatata
相关产品推荐
相关产品推荐

