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

PySpark如何将特定格式字符串转换为yyyy-mm-dd日期格式?

解决Spark中日期字符串转yyyy-mm-dd格式的问题

你的日期字符串格式是Mon, 01 Mar 2021 13:23:06 +0000,之前代码生成NULL是因为substring截取的内容格式和to_date指定的格式不匹配,而且Spark的substring起始索引从1开始计数,你之前的截取范围不对。

方案1:直接解析完整日期字符串(推荐)

不用截取,直接给to_date指定原字符串对应的格式即可:

from pyspark.sql.functions import to_date

df = df.withColumn('date', to_date('test_started_at', 'EEE, dd MMM yyyy HH:mm:ss Z'))

格式说明:

  • EEE:星期缩写(如Mon)
  • dd:两位日期
  • MMM:月份缩写(如Mar)
  • yyyy:四位年份
  • HH:mm:ss:时分秒
  • Z:时区偏移(如+0000)

方案2:修正截取逻辑后解析

如果一定要先截取日期部分,调整substring的起始位置和长度,确保截取到01 Mar 2021格式,再匹配对应的解析格式:

from pyspark.sql.functions import substring, to_date

# 从第6位开始取11个字符,得到"01 Mar 2021"
df = df.withColumn('test_date', substring('test_started_at', 6, 11))
# 解析格式要和截取后的字符串匹配,是空格分隔的dd MMM yyyy
df = df.withColumn('date', to_date('test_date', 'dd MMM yyyy'))

注:之前你指定的dd-MMM-yyyy是横杠分隔格式,但截取后的字符串是空格分隔,格式不匹配才导致解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:47:03