PySpark SQL中如何将长整型Unix时间戳转换为datetime
问题根因
from_unixtime 只支持秒级(10位长度)Unix时间戳作为入参,你存储为long类型的时间戳如果是毫秒级(13位)、微秒级(16位),直接传入函数会因为数值差了1000/1000000的量级,最终输出完全不符合预期的错误日期。
修复方案
先根据时间戳精度把数值换算成秒级,再调用格式转换函数即可:
- 13位毫秒级时间戳处理逻辑:
from_unixtime( (col("firstAvailableDateTimeUnix") / 1000).cast("long"), "yyyy-MM-dd HH:mm:ss" )
- 16位微秒级时间戳处理逻辑:
from_unixtime( (col("firstAvailableDateTimeUnix") / 1000000).cast("long"), "yyyy-MM-dd HH:mm:ss" )
快速确认精度的方法:随便抽取一条时间戳样本数数字长度,10位可直接用原函数,13位除以1000,16位除以1000000即可,换算后记得转成long类型避免浮点精度问题。
内容的提问来源于stack exchange,提问作者Emily Kuo
相关产品推荐
相关产品推荐

