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

PySpark字符串转日期报错HOUR_OF_DAY: 0 -> 1如何解决?

问题原因

这个报错是夏令时时区转换冲突导致的:你使用的unix_timestamp函数默认按Spark会话的本地时区解析时间字符串,部分实行过夏令时的时区(比如中国1986-1991年执行夏令时期间)存在日期切换当天缺失特定小时段的情况,比如切换日凌晨2点拨快到3点,当天不存在0-2点的时间,转换时就会抛出该异常。

解决方案

方案1:直接使用to_date简化转换(推荐)

PySpark的to_date原生支持直接指定字符串格式解析,不需要中转时间戳,从根源避免时区转换问题:

final_df = final_df.withColumn('dob', to_date(col('DateOfBirth'), 'yyyy-MM-dd'))

方案2:指定UTC时区解析(兼容原有写法)

如果需要保留时间戳转换的逻辑,可以指定无夏令时的UTC作为解析时区,有两种实现方式:

  • 单次转换指定时区:
final_df = final_df.withColumn('dob', to_date(unix_timestamp(col('DateOfBirth'),'yyyy-MM-dd').cast("timestamp"), "UTC"))
  • 全局设置Spark会话时区为UTC:
spark.conf.set("spark.sql.session.timeZone", "UTC")
# 后续执行原有代码即可正常运行
final_df = final_df.withColumn('dob',to_date(unix_timestamp(col('DateOfBirth'),'yyyy-MM-dd').cast("timestamp")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:27:03