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

PySpark中如何将dd/MM/yyyy hh:mm:ss格式字符串转为yyyy-MM-dd hh:mm:ss时间戳

在PySpark中将dd/MM/yyyy hh:mm:ss字符串转为yyyy-MM-dd hh:mm:ss格式的时间戳类型

核心逻辑

Spark的TimestampType是时间戳的内部存储类型,本身没有固定格式——格式仅在字符串与时间戳互转时生效。你需要分两步操作:

  1. 将原始字符串解析为TimestampType列
  2. 若需要以指定格式展示,将时间戳列格式化为目标格式的字符串(或调整Spark默认显示配置)

代码示例

1. 准备测试数据

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

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

# 模拟原始数据
sample_data = [("01/05/2024 14:30:45",), ("15/12/2023 09:15:00",)]
df = spark.createDataFrame(sample_data, schema=["raw_date_str"])
df.show()

2. 解析字符串为TimestampType

使用to_timestamp函数,指定原始字符串的格式(必须完全匹配):

# 注意:若原始时间是12小时制(带AM/PM),格式改为"dd/MM/yyyy hh:mm:ss a"
df = df.withColumn("timestamp_col", to_timestamp("raw_date_str", "dd/MM/yyyy HH:mm:ss"))

# 查看结构和数据
df.printSchema()
df.show()

此时timestamp_col的类型是TimestampType,内部存储为时间戳数值。

3. 格式化时间戳为目标字符串格式

如果需要将时间戳以yyyy-MM-dd hh:mm:ss的格式输出为字符串,使用date_format函数:

df = df.withColumn("formatted_date", date_format("timestamp_col", "yyyy-MM-dd HH:mm:ss"))
df.show()

4. (可选)设置Spark默认时间戳显示格式

如果希望所有时间戳列默认以目标格式展示,无需每次调用date_format,可以配置Spark参数:

spark.conf.set("spark.sql.timestamp.format", "yyyy-MM-dd HH:mm:ss")

# 之后直接查询时间戳列就会以指定格式显示
df.select("timestamp_col").show()

关键注意事项

  • 格式符区分大小写:MM是月份(01-12),mm是分钟;HH是24小时制小时(00-23),hh是12小时制小时(01-12,需配合a表示上午/下午)
  • 原始字符串格式必须与to_timestamp的格式参数完全匹配,否则会解析为null
  • TimestampType列的存储不受显示格式影响,仅用于计算或后续时间操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:25:40