【问题标题】:spark data frame convert a string column to timestamp with given format火花数据框将字符串列转换为具有给定格式的时间戳
【发布时间】:2019-03-31 00:28:16
【问题描述】:

当我执行时

sparkSession.sql("SELECT to_timestamp('2018-08-04.11:18:29 AM', 'yyyy-MM-dd.hh:mm:ss a') as timestamp")

答案中缺少上午/下午

+-------------------+
|          timestamp|
+-------------------+
|2018-08-04 11:18:29|
+-------------------+

但如果 AM/PM 不存在,那么它会给出正确的答案。

使用 unix_timestamp

sparkSession.sql("select from_unixtime(unix_timestamp('08-04-2018.11:18:29 AM','dd-MM-yyyy.HH:mm:ss a'), 'dd-MM-yyyy.HH:mm:ss a') as timestamp")

给出了正确的答案,但是数据类型变成了字符串,而我的要求是将数据类型转换为时间戳而不丢失数据。

有人有建议吗?

提前致谢。

【问题讨论】:

    标签: apache-spark dataframe timestamp


    【解决方案1】:

    Timestamp 数据类型中没有缺少 AM/PM。它只是以 24 小时格式显示时间。您不会丢失任何信息。

    例如,

    scala> spark.sql("SELECT to_timestamp('2018-08-04.11:18:29 PM', 'yyyy-MM-dd.hh:mm:ss a') as timestamp").show(false)
    +-------------------+
    |timestamp          |
    +-------------------+
    |2018-08-04 23:18:29|
    +-------------------+
    

    无论何时您想要使用 AM/PM 表示时间戳,只需使用日期/时间格式化函数

    【讨论】:

      【解决方案2】:

      打印表示的格式是固定的(本地时区中符合 ISO 8601 的字符串)并且无法修改。

      这里没有可以帮助您的转换,因为任何满足输出格式的转换都必须将数据转换为字符串。

      【讨论】:

        猜你喜欢
        • 2019-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 2021-12-19
        相关资源
        最近更新 更多