在PySpark中如何将Zulu毫秒时间戳转换为可读日期时间格式?
Spark毫秒级时间戳转可读日期解决方案
问题出在你的时间戳是毫秒级(1533953335000),但Spark的TimestampType默认解析的是秒级时间戳,直接强转会把毫秒数当作秒数计算,自然得到错误的远未来日期(50579-01-17)。
解决方案
根据DTMZ列的原始类型,选择对应的处理方式:
情况1:DTMZ是数值类型(如Long)
先将毫秒时间戳除以1000转换为秒级,再转为Timestamp类型,最后按需格式化:
from pyspark.sql import functions as f from pyspark.sql import types as t # 转换为Timestamp类型(带完整时间信息) df = df.withColumn('DTMZ', f.to_timestamp(df.DTMZ / 1000)) # 如需转为yyyy-MM-dd格式的日期字符串 df = df.withColumn('DTMZ_date_str', f.date_format(f.col('DTMZ'), 'yyyy-MM-dd')) # 如需转为Date类型 df = df.withColumn('DTMZ_date', f.to_date(f.col('DTMZ')))
情况2:DTMZ是字符串类型
先将字符串转为Long类型,再按上述步骤处理:
from pyspark.sql import functions as f from pyspark.sql import types as t df = df.withColumn('DTMZ', f.to_timestamp(f.col('DTMZ').cast(t.LongType()) / 1000)) # 后续格式化步骤同情况1
验证示例时间戳
将1533953335000除以1000得到1533953335,对应的正确日期是2018-08-11。
内容的提问来源于stack exchange,提问作者wdriscoll28
相关产品推荐
相关产品推荐

