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

在PySpark中将dd/mmm/YYYY格式字符串日期转换为yyyy-mm-dd

PySpark中dd/mmm/YYYY格式字符串转yyyy-mm-dd日期类型解决方法

空值问题通常源于日期格式符不匹配或Spark日期解析的语言环境不兼容英文月份缩写,以下是两种可靠的解决方法:

方法1:使用to_date指定正确格式符

PySpark的日期解析遵循Java SimpleDateFormat规则,针对dd/mmm/YYYY格式(如04/Oct/2022),需用dd/MMM/yyyy作为格式参数:

代码示例

  1. 创建示例数据集
from pyspark.sql import SparkSession
from pyspark.sql.functions import to_date

spark = SparkSession.builder.appName("DateConv").getOrCreate()

data = [("A", "04/Oct/2022", 5), ("B", "10/Jan/2023", 15)]
df = spark.createDataFrame(data, ["id", "date", "value"])
  1. 执行转换
# 将字符串转为Date类型,自动以yyyy-mm-dd格式展示
df_result = df.withColumn("date", to_date(df["date"], "dd/MMM/yyyy"))
  1. 查看结果
df_result.show()

输出:

+---+----------+-----+
| id|      date|value|
+---+----------+-----+
|  A|2022-10-04|    5|
|  B|2023-01-10|   15|
+---+----------+-----+

方法2:处理语言环境不兼容问题

若仍返回空值,大概率是Spark默认解析语言非英文,需强制指定英文 locale(Spark 3.0+支持):

df_result = df.withColumn(
    "date",
    to_date(df["date"], "dd/MMM/yyyy", "en_US")
)

或者在创建SparkSession时全局配置:

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

常见错误提醒

  • 不要用mm(代表分钟)替代MMM(英文月份缩写)
  • 不要用YYYY(周年)替代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.21 14:34:58