PySpark DataFrame日期列转换后输出为null问题解决求助
问题根因
unix_timestamp方法传入的日期格式与原数据格式不匹配:原DATE_Landing的日期部分为年-月-日结构,你传入的格式为dd-MM-yyyy(日-月-年),无法匹配所以解析结果为null。- 逻辑冗余且列覆盖错误:你在SQL查询中已经通过replace得到了截断后的日期字符串,但后续的
withColumn操作直接覆盖了DATE列,且仍使用未处理的原始DATE_Landing字段做解析,直接导致结果异常。
解决方法
Spark原生支持to_date函数直接从带时分秒的时间字段中提取日期,不需要手动做字符串替换,两种实现方案如下:
方案1:纯Spark SQL实现(更简洁)
final_query_RAW = spark.sql(""" select sum(salary) as salary, to_date(DATE_Landing) as DATE from empytable group by DATE_Landing """)
方案2:DataFrame API实现
final_query_RAW = spark.sql("select sum(salary) as salary, DATE_Landing from empytable group by DATE_Landing") \ .withColumn('DATE', to_date(col('DATE_Landing')))
如果你的Spark版本较低无法自动识别格式,可以显式指定格式字符串:
.withColumn('DATE', to_date(col('DATE_Landing'), 'yyyy-MM-dd HH:mm:ss.S'))
内容的提问来源于stack exchange,提问作者hari_agg
相关产品推荐
相关产品推荐

