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

PySpark:将日期时间转为Date/Timestamp类型并保留原格式

问题解决:PySpark中保持Date/Timestamp类型同时按指定格式展示/输出

核心说明

Parquet是列式二进制存储格式,Date和Timestamp类型存储的是底层数值(Date存从基准日起的天数、Timestamp存微秒级时间戳),并非字符串格式。你看到的YYYY-MM-DD或YYYY-MM-DDTHH:MM:SS只是Spark、Pandas等工具默认的显示格式,不是Parquet文件内的存储格式。要保持原生类型的同时得到指定格式的输出,需要在读取或导出阶段做格式化处理。

解决方案代码

1. 原CSV转Parquet的代码(保留原生类型)

先确保正确将CSV中的字符串转成Date/Timestamp类型(注意你的Date字段是mm/dd/yy格式,修正格式串匹配):

from pyspark.sql.functions import to_date, to_timestamp

# 假设data是读取后的CSV DataFrame
for col_name, col_type in data.dtypes:
    if col_name == 'Date':
        data = data.withColumn(col_name, to_date(data[col_name], 'MM/dd/yy'))
    elif col_name == 'Timestamp':
        data = data.withColumn(col_name, to_timestamp(data[col_name], 'yyyy-MM-dd-HH.mm.ss.SSSSSS'))

# 写入Parquet,此时存储的是原生Date/Timestamp类型
data.write.parquet("path/to/output.parquet")

2. 读取Parquet时按指定格式展示/导出

如果需要按MM/dd/yyyy和yyyy-MM-dd-HH.mm.ss.SSSSSS格式输出,可在读取后用date_format函数转换为字符串格式(原生类型列可保留):

from pyspark.sql.functions import date_format

# 读取Parquet文件
df = spark.read.parquet("path/to/output.parquet")

# 方式1:添加格式化后的字符串列,保留原生类型列
df_formatted = df.withColumn("Formatted_Date", date_format(df["Date"], "MM/dd/yyyy")) \
                 .withColumn("Formatted_Timestamp", date_format(df["Timestamp"], "yyyy-MM-dd-HH.mm.ss.SSSSSS"))

# 查看结果
df_formatted.show()

# 方式2:直接查询格式化后的结果,不修改原DataFrame
df.select(
    date_format("Date", "MM/dd/yyyy").alias("Date"),
    date_format("Timestamp", "yyyy-MM-dd-HH.mm.ss.SSSSSS").alias("Timestamp")
).show()

# 方式3:导出为CSV等格式时使用指定格式
df.select(
    date_format("Date", "MM/dd/yyyy").alias("Date"),
    date_format("Timestamp", "yyyy-MM-dd-HH.mm.ss.SSSSSS").alias("Timestamp")
).write.csv("path/to/formatted_output.csv", header=True)

关键提醒

  • 不要试图修改Parquet中Date/Timestamp类型的存储格式,因为原生类型没有格式属性,格式仅存在于字符串转换阶段。
  • 若必须在某个环节展示指定格式,始终通过date_format将原生类型转换为字符串列来实现,原生类型列可保留用于后续的日期时间计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:57:37