使用 unix 时间戳转换为日期
Convert using unixtimestamp to Date
我在数据框中有一个字段,其中有一列日期为 1632838270314 作为示例
我想将其转换为日期,例如 'yyyy-MM-dd' 目前我有这个,但它不起作用:
date = df['createdOn'].cast(StringType())
df = df.withColumn('date_key',unix_timestamp(date),'yyyy-MM-dd').cast("date"))
createdOn 是派生 date_key
的字段
方法 unix_timestamp()
用于将时间戳或日期 字符串 转换为自 01-01-1970(“纪元”)以来的秒数。我知道你想做相反的事情。
您的示例值“1632838270314”似乎是自纪元以来的毫秒数。
在这里你可以简单地cast
它从毫秒转换为秒后:
from pyspark.sql import functions as F
df = sql_context.createDataFrame([
Row(unix_in_ms=1632838270314),
])
(
df
.withColumn('timestamp_type', (F.col('unix_in_ms')/1e3).cast('timestamp'))
.withColumn('date_type', F.to_date('timestamp_type'))
.withColumn('string_type', F.col('date_type').cast('string'))
.withColumn('date_to_unix_in_s', F.unix_timestamp('string_type', 'yyyy-MM-dd'))
.show(truncate=False)
)
# Output
+-------------+-----------------------+----------+-----------+-----------------+
|unix_in_ms |timestamp_type |date_type |string_type|date_to_unix_in_s|
+-------------+-----------------------+----------+-----------+-----------------+
|1632838270314|2021-09-28 16:11:10.314|2021-09-28|2021-09-28 |1632780000 |
+-------------+-----------------------+----------+-----------+-----------------+
您可以将转换合并为一个命令:
df.withColumn('date_key', F.to_date((F.col('unix_in_ms')/1e3).cast('timestamp')).cast('string'))
我在数据框中有一个字段,其中有一列日期为 1632838270314 作为示例
我想将其转换为日期,例如 'yyyy-MM-dd' 目前我有这个,但它不起作用:
date = df['createdOn'].cast(StringType())
df = df.withColumn('date_key',unix_timestamp(date),'yyyy-MM-dd').cast("date"))
createdOn 是派生 date_key
的字段方法 unix_timestamp()
用于将时间戳或日期 字符串 转换为自 01-01-1970(“纪元”)以来的秒数。我知道你想做相反的事情。
您的示例值“1632838270314”似乎是自纪元以来的毫秒数。
在这里你可以简单地cast
它从毫秒转换为秒后:
from pyspark.sql import functions as F
df = sql_context.createDataFrame([
Row(unix_in_ms=1632838270314),
])
(
df
.withColumn('timestamp_type', (F.col('unix_in_ms')/1e3).cast('timestamp'))
.withColumn('date_type', F.to_date('timestamp_type'))
.withColumn('string_type', F.col('date_type').cast('string'))
.withColumn('date_to_unix_in_s', F.unix_timestamp('string_type', 'yyyy-MM-dd'))
.show(truncate=False)
)
# Output
+-------------+-----------------------+----------+-----------+-----------------+
|unix_in_ms |timestamp_type |date_type |string_type|date_to_unix_in_s|
+-------------+-----------------------+----------+-----------+-----------------+
|1632838270314|2021-09-28 16:11:10.314|2021-09-28|2021-09-28 |1632780000 |
+-------------+-----------------------+----------+-----------+-----------------+
您可以将转换合并为一个命令:
df.withColumn('date_key', F.to_date((F.col('unix_in_ms')/1e3).cast('timestamp')).cast('string'))