将string数据类型从string转换为timestamp时,该值将变为null。
我有以下格式的值
20070811T00789.167861+0100
当我执行以下操作时,我想将类型转换为“timestamp”
df.withColumn('arrivetime', df['arrivetime'].cast('timestamp'))
价值正在变为null。如何将列转换为时间戳而不影响值及其格式?
我不确切地知道你用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")
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。