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

如何在PySpark中将DataFrame日期列格式从dd-mm-yyyy转换为yyyy-mm-dd

PySpark日期格式转换:dd-mm-yyyy → yyyy-mm-dd

嘿,这个需求太常见了,我给你两种靠谱的处理方式,根据你的实际场景选就行:

方法1:转成指定格式的字符串

如果你的原始列是字符串类型,先把它解析成PySpark的日期类型,再格式化成你要的yyyy-mm-dd字符串格式就行。直接上代码:

from pyspark.sql import SparkSession
from pyspark.sql.functions import to_date, date_format

# 先准备测试数据方便你验证
spark = SparkSession.builder.appName("DateConvertDemo").getOrCreate()
sample_data = [("01-01-1999",), ("15-03-2020",), ("31-12-2023",)]
df = spark.createDataFrame(sample_data, ["original_date"])

# 核心转换逻辑
df_result = df.withColumn(
    "formatted_date",
    date_format(to_date(df["original_date"], "dd-MM-yyyy"), "yyyy-MM-dd")
)

# 查看转换结果
df_result.show()

这里要注意两个关键细节:

  • to_date的第二个参数是原始日期的格式,这里填dd-MM-yyyy(大写MM代表月份,小写mm是分钟,千万别搞混!)
  • date_format的参数是你想要的目标格式,填yyyy-MM-dd就能得到标准的年-月-日字符串

方法2:转为标准日期类型(更推荐)

如果后续还要做日期相关操作(比如日期过滤、加减、按日期聚合),其实没必要转成字符串,直接把原始字符串解析成PySpark的DateType就好。PySpark显示日期类型时,默认就是yyyy-MM-dd的格式,而且这种类型天生支持各种日期运算,实用性更强:

df_with_date_type = df.withColumn(
    "standard_date",
    to_date(df["original_date"], "dd-MM-yyyy")
)

# 查看列类型和转换结果
df_with_date_type.printSchema()
df_with_date_type.show()

执行后你会发现standard_date列的类型是date,显示出来的就是1999-01-01这种标准格式,完美匹配你的需求。

小提示

如果原始数据里有格式不规范的日期(比如32-01-2023这种无效日期),to_date会返回null。要是需要处理这种异常情况,可以用coalesce给个默认值,或者用when做条件判断来过滤/修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:32:41