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

如何使用Pyspark将Epoch秒数转换为timestamp时间戳

Unix Epoch秒级时间戳转Timestamp实现方案

你提供的原始数据集结构如下:

+---+----------+
|id |t_date    |
+---+----------+
|1  |1635234395|
|1  |1635233361|
+---+----------+

其中t_date字段为秒级Unix Epoch数值,直接使用Spark内置的to_timestamp函数即可完成转换,无需自定义UDF,实现方式如下:

PySpark 实现

from pyspark.sql import functions as F

# 原始DataFrame记为df
df = df.withColumn("t_date_timestamp", F.to_timestamp(F.col("t_date")))
# 若需要直接覆盖原字段,将新字段名改为t_date即可
# df = df.withColumn("t_date", F.to_timestamp(F.col("t_date")))

# 输出验证结果
df.show(truncate=False)

转换后预期输出:

+---+----------+-------------------+
|id |t_date    |t_date_timestamp   |
+---+----------+-------------------+
|1  |1635234395|2021-10-26 15:46:35|
|1  |1635233361|2021-10-26 15:29:21|
+---+----------+-------------------+

Spark SQL 实现

-- 先将原始DataFrame注册为临时视图
CREATE OR REPLACE TEMP VIEW source_table AS SELECT * FROM 原始表;

SELECT 
    id,
    t_date,
    to_timestamp(t_date) AS t_date_timestamp
FROM source_table;

Scala Spark 实现

import org.apache.spark.sql.functions.{col, to_timestamp}

val newDf = df.withColumn("t_date_timestamp", to_timestamp(col("t_date")))
newDf.show(truncate = false)

常见错误原因排查

如果之前转换结果异常,基本属于两类问题:

  • 误将秒级时间戳识别为毫秒级,手动对t_date乘1000后再转换,导致时间值偏大异常
  • 混用from_unixtime等过时函数做多余格式转换,引入格式匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:06