时间戳转换使值变为空

时间:2018-12-13 10:14:30

标签: apache-spark pyspark

将列数据类型从字符串转换为时间戳时,该值将为null。

我具有以下格式的值

20070811T00789.167861+0100

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

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

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

1 个答案:

答案 0 :(得分:0)

我不知道您要使用哪种格式,时间的5位数字和末尾的6位(纳秒?),但是您不知道Spark中的时间戳是毫秒,而不是纳秒,所以您要丢失信息。

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

首先,您可能必须使用Spark的regexp_replace

来除去时间戳的最后3位数字

在Scala中,外观如下:

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

然后您可以像这样使用unix_timestamp

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