在 PySpark 中将长纪元时间戳转换为日期时间

Converting long epoch timestamp into date time in PySpark

我有一个具有以下架构的 spark 数据框:

root
 |-- var1: long (nullable = true)
 |-- var2: long (nullable = true)
 |-- var3: long (nullable = true)
 |-- y_timestamp: long (nullable = true)
 |-- x_timestamp: long (nullable = true)

如何将时间戳转换为可读的日期时间变量?

目前看起来像:1561360513087

要将时间戳转换为日期时间,您可以这样做:

import datetime

timestamp = 1545730073
dt_object = datetime.datetime.fromtimestamp(timestamp)

但目前您的时间戳值太大:您所在的年份为 51447,超出范围。

我想,这个值是timestamp = 1561360513.087:

dt_object = datetime.datetime.fromtimestamp(1561360513.087)
print(dt_object)

你得到:“2019-06-24 09:15:13.087000”

在创建dataframe时使用withColumn,可以将时间戳(以毫秒为单位)转换为秒,然后再转换为时间戳。

.withColumn("x_timestamp", spark_fns.expr("from_unixtime(x_timestamp/1000, 'yyyy-MM-dd')")

您可以先将 Unix 时间戳转换为秒,然后通过转换为 Spark 时间戳将其转换为日期时间(是的,Spark 中的命名有点混乱 - 时间戳表示日期时间)

import pyspark.sql.functions as F

df.withColumn("var1_timestamp", (F.col("var1")/1000).cast("timestamp"))