You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark将timestamp转换为epoch毫秒值时数值不匹配求解

问题原因

  1. from_unixtime 默认输出格式为yyyy-MM-dd HH:mm:ss,会直接截断传入时间参数的毫秒部分,你的eq_time字段从生成阶段就丢失了毫秒信息,自然无法转回原数值
  2. unix_timestamp 函数返回的是秒级时间戳,返回结果本身就不包含毫秒位,直接使用只会得到10位秒级数值

兼容Spark 2.4.3的解决方案

你需要在日期转字符串阶段保留毫秒位,转回时通过timestamp类型乘1000得到毫秒级时间戳,参考代码如下:

from pyspark.sql.functions import col, from_unixtime

df = spark.sql("select '1636663343887' as epoch_seconds")
# 生成eq_time时指定带毫秒的格式,保留完整时间精度
df1 = df.withColumn("eq_time", from_unixtime(col("epoch_seconds") / 1000, "yyyy-MM-dd HH:mm:ss.SSS"))
# 先转成timestamp类型再乘1000,得到毫秒级时间戳
df2 = df1.withColumn("epoch_sec", (col("eq_time").cast("timestamp") * 1000).cast("long"))

df2.show(truncate=False)

注意事项

如果你的eq_time字段是已经存储好、且本身不包含毫秒位的字符串,那么丢失的毫秒信息无法逆向恢复,必须在第一次将时间戳转换为字符串的环节就保留毫秒位。

内容的提问来源于stack exchange,提问作者whatsinthename

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:54:02