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

PySpark中D-MMM-yyyy格式短日期转换异常:仅Jan可正常转换?

PySpark日期转换仅Jan生效的问题解决

问题原因

你遇到的问题源于两个核心错误:

  • 格式符误用:D是一年中的第几天的格式符,而非月份内的日期,应该用dd(两位日)或d(一位/两位日)。
  • Locale不匹配:Spark默认Locale可能非英文,导致Nov这类英文月份缩写无法被解析,仅Jan因环境兼容偶然生效。

修正代码

方法1:指定英文Locale(Spark 3.0+)

from pyspark.sql.functions import col, to_date

df2 = spark.createDataFrame([["05-Nov-2000"], ["02-Jan-2021"]], ["date"])
# 修正格式符为dd-MMM-yyyy,并指定英文Locale
df2 = df2.withColumn("date", to_date(col("date"), "dd-MMM-yyyy", locale="en_US"))

display(df2)

方法2:全局设置Locale(适用于所有日期解析)

如果需要全局生效,可以在Spark会话初始化时设置:

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

df2 = spark.createDataFrame([["05-Nov-2000"], ["02-Jan-2021"]], ["date"])
df2 = df2.withColumn("date", to_date(col("date"), "dd-MMM-yyyy"))

display(df2)

运行结果

date
------------
2000-11-05
2021-01-02

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:05:30