开发者社区> 问答> 正文

时间戳转换使值为null

将string数据类型从string转换为timestamp时,该值将变为null。

我有以下格式的值

20070811T00789.167861+0100
当我执行以下操作时,我想将类型转换为“timestamp”

df.withColumn('arrivetime', df['arrivetime'].cast('timestamp'))
价值正在变为null。如何将列转换为时间戳而不影响值及其格式?

展开
收起
社区小助手 2018-12-21 13:42:39 2793 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    我不确切地知道你用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")

    2019-07-17 23:23:24
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载