You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark DataFrame字符串转unix_timestamp触发SparkUpgrade异常怎么解决

问题根因

Spark 3.0+版本重构了日期时间解析逻辑,将原有基于SimpleDateFormat的实现替换为Java 8+的DateTimeFormatter,旧版本支持的部分时间格式符不再兼容,你当前使用的yyyy/MM/dd hh:mm:ss aa格式中的aa是Spark 2.x版本的兼容写法,在新解析器中无法识别。

解决方案

方案1:修改为Spark 3.x兼容的时间格式

将格式串中的双a改为单a即可,12小时制下的上午/下午标记在Spark 3.x的时间格式规范中仅需单个a即可匹配,修改后代码如下:

pattern = 'yyyy/MM/dd hh:mm:ss a'
file_new = file1.withColumn('Incident_DateTime', unix_timestamp(file1['Incident_DateTime'], pattern).cast('timestamp'))  
file_new.select('Incident_DateTime').show(5, False)

如果你的数据中小时字段为24小时制,还需要把hh改为HH,避免12小时制解析出现歧义。

方案2:开启旧版解析兼容模式

如果不想修改现有格式代码,可以配置参数恢复Spark 3.0之前的时间解析行为:

  • 代码内全局生效,在SparkSession初始化后添加配置:
spark.conf.set("spark.sql.legacy.timeParserPolicy", "LEGACY")
  • 作业提交时指定参数:
spark-submit --conf spark.sql.legacy.timeParserPolicy=LEGACY your_script.py

内容的提问来源于stack exchange,提问作者akshay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:24:06