将列数据类型从字符串转换为时间戳时,该值将为null。
我具有以下格式的值
20070811T00789.167861+0100
当我执行以下操作时,我想将类型转换为“时间戳”
df.withColumn('arrivetime', df['arrivetime'].cast('timestamp'))
该值正在变为null
。如何在不影响值及其格式的情况下将列强制转换为时间戳?
答案 0 :(得分:0)
我不知道您要使用哪种格式,时间的5位数字和末尾的6位(纳秒?),但是您不知道Spark中的时间戳是毫秒,而不是纳秒,所以您要丢失信息。
话虽如此,您可以使用Spark的unix_timestamp
方法使用SimpleDateFormat
语法将字符串转换为时间戳。
首先,您可能必须使用Spark的regexp_replace
在Scala中,外观如下:
regexp_replace(df("arrivetime"), """(\.\d{3})\d*""", """$1""")
然后您可以像这样使用unix_timestamp
:
unix_timestamp([replaced string], "yyyyMMdd'T'HHmmss.SSSz")