在pyspark中将时间戳格式转换为iso时间格式

hok*_*oio 1 python timestamp apache-spark apache-spark-sql pyspark

我有一个 pyspark 数据框,其中有一个字段,时间,有两种格式的时间戳,

"11-04-2019,00:32:13" and "2019-12-05T07:57:16.000Z" 
Run Code Online (Sandbox Code Playgroud)

如何将所有时间戳转换为第二种格式,即与此格式匹配的 iso 时间格式?

%Y-%m-%dT%H:%M:%S.%fZ
Run Code Online (Sandbox Code Playgroud)

因此,理想情况下,“11-04-2019,00:32:13”之类的值应该是“2019-11-04T00:32:13.000Z”

mck*_*mck 9

您可以先将时间戳转换为时间戳类型,然后使用date_format将它们转换回所需的格式:

df.show(truncate=False)
+------------------------+
|time                    |
+------------------------+
|11-04-2019 00:32:13     |
|2019-12-05T07:57:16.000Z|
+------------------------+

import pyspark.sql.functions as F

df2 = df.withColumn(
    'time', 
    F.date_format(
        F.coalesce(
            F.to_timestamp('time'), 
            F.to_timestamp('time', 'MM-dd-yyyy HH:mm:ss')
        ), 
        "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
    )
)

df2.show(truncate=False)
+------------------------+
|time                    |
+------------------------+
|2019-11-04T00:32:13.000Z|
|2019-12-05T07:57:16.000Z|
+------------------------+
Run Code Online (Sandbox Code Playgroud)