PySpark中如何将"Dec 25 2022 6:31AM"格式字符串转为Timestamp?
解决PySpark日期字符串转Timestamp返回null的问题
你的问题核心是日期格式字符串不匹配,你提供的日期格式是"Dec 25 2022 6:31AM",但之前的代码用了完全不对应的格式模板,导致转换失败返回null。
正确的转换代码
使用to_timestamp函数时,必须指定和目标字符串完全匹配的格式模板:
import pyspark.sql.functions as fn # 注意格式模板里的两个空格,以及hh(12小时制)、a(AM/PM标识) df = df.withColumn('new_ts', fn.to_timestamp(fn.col('SendTime'), 'MMM dd yyyy hh:mma'))
格式模板说明
MMM:匹配英文月份缩写(比如Dec、Jan)dd:两位数字的日期yyyy:四位数字的年份- 两个空格:对应原字符串中年份和时间之间的两个空格
hh:12小时制的小时数(因为原时间带AM/PM)mm:两位数字的分钟a:匹配AM/PM标识
额外注意事项
如果你的Spark集群默认时区和日期中的时区不一致,可能需要额外指定时区参数:
df = df.withColumn('new_ts', fn.to_timestamp(fn.col('SendTime'), 'MMM dd yyyy hh:mma', 'UTC'))
内容的提问来源于stack exchange,提问作者Guilherme Mendes
相关产品推荐
相关产品推荐

