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

PySpark DataFrame日期格式转换问题:需保持dd-MMM-yyyy格式

解决PySpark日期转换后格式不符的问题

核心原因

PySpark的DateType是无格式的日期对象,它仅存储年/月/日的逻辑值,没有内置的显示格式。你用to_date完成了字符串到日期类型的正确转换,但Spark会用默认格式(如yyyy-MM-dd或dd-MM-yyyy)展示日期对象,这并非存储的格式。要保持dd-MMM-yyyy的显示效果,需要额外处理。

解决方案

如果既要保留日期类型(支持日期运算),又要输出指定格式,分两步操作:

  1. 将字符串解析为日期类型(你的初始代码逻辑正确):
import pyspark.sql.functions as F
df = df.withColumn("mydate_date", F.to_date(df.mydate, "dd-MMM-yyyy"))

这一步生成的mydate_date是DateType,可用于日期加减、过滤等运算操作。

  1. 将日期类型格式化为指定字符串:
    使用date_format函数将日期对象转换为dd-MMM-yyyy格式的字符串列:
df = df.withColumn("mydate_formatted", F.date_format(df.mydate_date, "dd-MMM-yyyy"))

此时mydate_formatted为字符串类型,显示结果就是01-Jan-2022这类预期格式。

如果不需要保留日期类型的运算能力,也可以直接一步转换为格式化后的字符串:

df = df.withColumn("mydate", F.date_format(F.to_date(df.mydate, "dd-MMM-yyyy"), "dd-MMM-yyyy"))

注意事项

如果遇到英文月份缩写解析失败(非英文环境下),可设置Spark本地化配置确保解析正常:

spark.conf.set("spark.sql.locale", "en_US")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:35:32