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
相关产品推荐
相关产品推荐

