使用 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'))