在 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"))
我有一个具有以下架构的 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"))