PySpark转换13位Unix时间戳结果格式错误如何解决
问题定位
13位Unix时间戳的单位为毫秒,而PySpark内置的F.from_unixtime方法要求入参是秒级Unix时间戳。你的代码中错误将时间戳除以了1000 ** 3(即10亿),相当于把毫秒值按纳秒做了换算,最终输出的日期自然和预期不符。
修正代码
只需要将13位毫秒时间戳除以1000,得到正确的秒级时间戳后再做格式转换即可:
from pyspark.sql import functions as F sd = df.withColumn('Date2', F.from_unixtime(F.col("Date") / 1000, "yyyy-MM-dd")) display(sd)
可选优化写法
如果你使用的是PySpark 3.1及以上版本,可以直接用to_timestamp函数指定毫秒单位解析,不需要手动做除法,后续如果需要保留时分秒精度也更方便:
from pyspark.sql import functions as F # 解析为时间类型后转日期,输出格式同yyyy-MM-dd sd = df.withColumn('Date2', F.to_timestamp("Date", "ms").cast("date")) display(sd)
内容的提问来源于stack exchange,提问作者Federico Gottardi
相关产品推荐
相关产品推荐

