如何使用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
相关产品推荐
相关产品推荐

