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是时间戳的内部存储类型,本身没有固定格式——格式仅在字符串与时间戳互转时生效。你需要分两步操作:
- 将原始字符串解析为
TimestampType列 - 若需要以指定格式展示,将时间戳列格式化为目标格式的字符串(或调整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
相关产品推荐
相关产品推荐

