首页 > 解决方案 > 时间戳转换使值 null

问题描述

当将列数据类型从字符串转换为时间戳时,值变为空。

我有以下格式的值

20070811T00789.167861+0100

当我执行以下操作时,我想将类型转换为“时间戳”

df.withColumn('arrivetime', df['arrivetime'].cast('timestamp'))

价值正在成为null。如何在不影响值及其格式的情况下将列转换为时间戳?

标签: apache-sparkpyspark

解决方案


我不确切知道您要使用 5 位时间和最后的 6 位(纳秒?)格式,但知道 Spark 中的时间戳是毫秒,而不是纳秒,所以您会丢失信息。

话虽如此,您可以使用 Spark 的unix_timestamp方法使用SimpleDateFormat语法将字符串转换为时间戳。

首先,您可能必须使用 Spark 删除时间戳的最后 3 位数字regexp_replace

在 Scala 中,它看起来像:

regexp_replace(df("arrivetime"), """(\.\d{3})\d*""", """$1""")

然后你可以这样使用unix_timestamp

unix_timestamp([replaced string], "yyyyMMdd'T'HHmmss.SSSz")


推荐阅读