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

PySpark转换指定格式字符串为datetime返回NULL如何解决?

问题根因

你的转换失败是由以下几个格式配置错误导致的:

  • 月份格式符使用错误:L用于匹配数字格式的月份(如07、7),你当前的月份是英文短名称Jul,需要改用MMM匹配。
  • 时区格式符使用错误:不能直接把UTC写死在格式串中,需要用z匹配时区缩写字段。
  • 小时格式符不匹配:hh是12小时制格式符,若你的时间为24小时制需要改用HH,避免后续出现下午时间解析错误。
  • 区域配置问题:若Spark运行环境默认locale不是英文,无法识别Thu、Jul这类英文缩写,需要指定英文区域。

修正后的代码

import pyspark.sql.functions as F

df.select(
    'Created Time',
    # 第三个参数指定英文区域,适配非英文运行环境
    F.to_timestamp(F.col('Created Time'), 'E MMM dd HH:mm:ss z yyyy', 'en_US').alias('parsed_datetime')
).show(1, False)

格式符对应说明

  • E:匹配星期短名称(对应样例中的Thu)
  • MMM:匹配月份短名称(对应样例中的Jul)
  • dd:匹配两位日期(对应样例中的01)
  • HH:匹配24小时制小时(对应样例中的09)
  • mm:ss:匹配分钟、秒
  • z:匹配时区短名称(对应样例中的UTC)
  • yyyy:匹配四位年份(对应样例中的2021)

如果使用的Spark版本低于3.0,不支持to_timestamp的locale参数,可以在初始化SparkSession时配置全局会话locale:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("time_parse") \
    .config("spark.sql.session.locale", "en_US") \
    .getOrCreate()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:39:03