【问题标题】:convert string with UTC offset to spark timestamp将具有 UTC 偏移量的字符串转换为火花时间戳
【发布时间】:2021-03-18 18:48:11
【问题描述】:

如何在 spark 中将字符串 2018-03-21 08:15:00 +03:00 存储为 timestamptype,保留 UTC 偏移量?

在下面尝试过

from pyspark.sql.functions import *

df = spark.createDataFrame([("2018-03-21 08:15:00 +03:00",)], ["timestamp"])
newDf= df.withColumn("newtimestamp", to_timestamp(col('timestamp'), "yyyy-MM-dd HH:mm:ss XXX")
)

这将打印 newtimestamp 列,其值转换为 UTC 时间,即 2018-03-21 05:15:00

如何将此字符串作为时间戳列存储在数据帧中保留偏移量,即将相同的字符串存储为时间戳或存储为 2018-03-21 08:15:00 +3000

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql datetime-format


    【解决方案1】:

    您需要使用date_format 将您从转换中获得的时间戳格式化为所需的模式:

    newDf = df.withColumn(
        "newtimestamp",
        to_timestamp(col('timestamp'), "yyyy-MM-dd HH:mm:ss XXX")
    ).withColumn(
        "newtimestamp_formatted",
        date_format("newtimestamp", "yyyy-MM-dd HH:mm:ss Z")
    )
    
    newDf.show(truncate=False)
    
    #+--------------------------+-------------------+-------------------------+
    #|timestamp                 |newtimestamp       |newtimestamp_formatted   |
    #+--------------------------+-------------------+-------------------------+
    #|2018-03-21 08:15:00 +03:00|2018-03-21 06:15:00|2018-03-21 06:15:00 +0100|
    #+--------------------------+-------------------+-------------------------+
    

    【讨论】:

    • 感谢@blackbishop,正如您所见,时间会自动转换,最终结果中的偏移量不是+0300。我希望在没有任何时间转换的情况下将相同的日期和偏移量(+3)存储为 timestamptype 。有可能吗?
    • 是的,但是我们在源中收到具有不同时间戳偏移的记录,即一条记录为2018-03-21 08:15:00 +03:00,另一条记录为2019-05-21 00:15:00 +01:00。所以我希望将记录存储为时间戳类型,保留相同的偏移值。即第一条记录为+03,第二条记录为+01。如果我将timezone 设置为任何特定位置,spark 会将原始日期时间转换为失去原始偏移值的偏移量。
    猜你喜欢
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    相关资源
    最近更新 更多