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

如何在PySpark中获取dd-MM-yyyy格式的Date类型数据?

PySpark 日期处理:Date类型+dd-MM-yyyy显示格式解决方案

问题核心

PySpark的Date类型本身是无格式的日期存储对象,show()方法默认用yyyy-MM-dd格式展示,但这并不影响其数据类型。你遇到的问题本质是混淆了「日期存储类型」和「日期显示格式」。

步骤1:确认字符串已成功转为Date类型

你的代码其实已经正确将dd-MM-yyyy格式的字符串转为Date类型,只是默认展示格式不是你想要的。可以通过printSchema()验证类型:

from pyspark.sql.functions import to_date
import pyspark.sql.functions as F

df = spark.createDataFrame([("12-06-2023",)], ["input_date"])
df = df.withColumn("output_date", F.to_date(df.input_date, "dd-MM-yyyy"))

# 查看数据类型
df.printSchema()
# 输出:
# root
#  |-- input_date: string (nullable = true)
#  |-- output_date: date (nullable = true)

此时output_date确实是Date类型,show()的默认展示格式只是PySpark的显示规则,不影响实际存储类型。

步骤2:实现「Date类型+dd-MM-yyyy显示/输出」

如果需要在展示或输出时用dd-MM-yyyy格式,同时保留Date类型,有两种方案:

方案1:临时格式化展示(不改变存储类型)

用date_format函数生成一个格式化后的字符串列,同时保留原Date列:

df = df.withColumn("formatted_date", F.date_format(df.output_date, "dd-MM-yyyy"))

df.show()
# 输出:
# +----------+-----------+--------------+
# |input_date|output_date|formatted_date|
# +----------+-----------+--------------+
# |12-06-2023| 2023-06-12|    12-06-2023|
# +----------+-----------+--------------+

# 查看类型:output_date仍是Date,formatted_date是String
df.printSchema()

方案2:全局修改日期展示格式(影响所有Date列的show输出)

如果想让所有Date列在show()时都用dd-MM-yyyy格式,可以修改Spark配置:

# 设置全局日期展示格式
spark.conf.set("spark.sql.dateFormat", "dd-MM-yyyy")

# 重新执行转换并展示
df = spark.createDataFrame([("12-06-2023",)], ["input_date"])
df = df.withColumn("output_date", F.to_date(df.input_date, "dd-MM-yyyy"))

df.show()
# 输出:
# +----------+-----------+
# |input_date|output_date|
# +----------+-----------+
# |12-06-2023| 12-06-2023|
# +----------+-----------+

# 类型仍为Date
df.printSchema()

注意:这个配置仅影响show()的显示格式,不会改变Date类型的存储本质。

常见误区澄清

  • 用to_date转换后得到的Date类型,无论展示格式如何,都是正确的日期对象,可直接用于日期计算(如加减天数、比较等)。
  • 如果直接用date_format转换字符串,得到的是String类型,无法参与日期运算,这也是你之前出现「格式正确但类型为String」的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:33:27