Pyspark如何将科学计数法字符串数字列转换为Timestamp时间戳类型
科学计数法字符串转Timestamp类型解决方法
错误原因
你之前使用的写法逻辑错误,to_timestamp第二个参数是日期格式模板,仅适配本身为日期格式的字符串(如2023/01/01 12:00:00),而你持有的1.63E+15是科学计数法表示的数值型时间戳,无法通过日期模板直接解析。
解决逻辑
- 先将字符串格式的科学计数法转为数值类型
- 再根据时间戳单位调整精度:
1.63E+15属于微秒级时间戳,要除以1000000转换为秒级后再传入to_timestamp转换
可用代码
from pyspark.sql import functions as F # 普通精度版本 sdf1 = sdf1.withColumn('num_ts', F.col('date_str').cast('double')) \ .withColumn('date', F.to_timestamp(F.col('num_ts') / 1e6)) # 查看结果 sdf1.select('date_str', 'date').show()
高精度需求可选方案:如果担心double类型丢失精度,可以先转为Decimal类型再处理
sdf1 = sdf1.withColumn('num_ts', F.col('date_str').cast('decimal(20,0)')) \ .withColumn('date', F.to_timestamp(F.col('num_ts') / 1000000))
如果转换后得到的日期和预期不符,调整除数的量级即可:毫秒级时间戳除以1e3、纳秒级时间戳除以1e9,直到匹配预期结果。
内容的提问来源于stack exchange,提问作者martian_rover
相关产品推荐
相关产品推荐

