使用 parser.parse 将 none 类型转换为日期时间

Convert none type to datetime using parser.parse

我正在使用以下函数将字符串解析为 PySpark

中的日期
func = udf(lambda x: parser.parse(x), DateType())

我的日期格式是:

"22-Jan-2021 00:00"

尽管此函数不适用于 None 类型,但我有以下 Spark 数据框

date
----
"22-Jan-2021 00:00"
""
"10-Feb-2020 14:00"

当我将 func 应用到 date 列时,我在 DF 的第二行收到一个错误,指出它无法解析 NoneType。使用 PySpark 和以上 func 解决此问题的任何提示?

一个 MVCE:

date = None
date_parsed = parser.parse(date)

看来你可以使用 to_timestamp 函数。

例如

df.show()
+---+-----------------+
| id|             date|
+---+-----------------+
|  1|22-Jan-2021 00:00|
|  2|             null|
|  3|10-Feb-2020 14:00|
+---+-----------------+

您可以简单地使用以下代码将date列中的字符串转换为时间戳类型。

from pyspark.sql import functions

df = df.withColumn("date", functions.to_timestamp("date", "dd-MMM-yyyy HH:mm"))

df.show()
+---+-------------------+
| id|               date|
+---+-------------------+
|  1|2021-01-22 00:00:00|
|  2|               null|
|  3|2020-02-10 14:00:00|
+---+-------------------+

您还可以使用 df.schema

验证转换是否正确完成
print(df.schema)
StructType(List(StructField(id,StringType,true),StructField(date,TimestampType,true)))