spark中from\utc\u timestamp函数和时区的奇怪问题

ycggw6v2  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(430)

a在将从json文件读取的日期转换为utc格式时遇到了一个奇怪的问题。我是克罗地亚(欧洲时区/萨格勒布)。当我打开带有utc datetime值的json文件(示例)时,根据打开位置的不同,对于相同的代码会得到不同的结果。
例子:

df.select("start").
    withColumn("start_zagreb",from_utc_timestamp(to_timestamp(col("start")),"Europe/Zagreb")).
    withColumn("start_frankfurt",from_utc_timestamp(to_timestamp(col("start")),"Europe/Frankfurt")).
    withColumn("start_paris",from_utc_timestamp(to_timestamp(col("start")),"Europe/Paris")).
    withColumn("start_vienna",from_utc_timestamp(to_timestamp(col("start")),"Europe/Vienna")

当我在欧洲aws的jupyter笔记本上运行它时(eu-central-1,这是在法兰克福),我得到了以下结果(除了法兰克福,其他都是正确的):

+------------------------+-------------------+-------------------+-------------------+-------------------+
|start                   |start_zagreb       |start_frankfurt    |start_paris        |start_vienna       |
+------------------------+-------------------+-------------------+-------------------+-------------------+
|2020-08-02T01:45:00.000Z|2020-08-02 03:45:00|2020-08-02 01:45:00|2020-08-02 03:45:00|2020-08-02 03:45:00|

所以所有的时间都是正确的,除了法兰克福的时间。
如果我在本地spark上的笔记本电脑(时区是欧洲/萨格勒布)上运行相同的代码,a将得到以下结果(除了法兰克福以外,所有结果都是错误的):

+------------------------+-------------------+-------------------+-------------------+-------------------+
|start                   |start_zagreb       |start_frankfurt    |start_paris        |start_vienna       |
+------------------------+-------------------+-------------------+-------------------+-------------------+
|2020-08-02T01:55:00.000Z|2020-08-02 05:55:00|2020-08-02 03:55:00|2020-08-02 05:55:00|2020-08-02 05:55:00|

我尝试了from\utc\u timestamp(to\u timestamp(col(“start”))和from\utc\u timestamp(col(“start”)),这没有什么区别。
有人知道这是怎么回事吗?似乎,若我试图将utc转换为我所在区域的本地时间,我会得到错误的结果。。。
spark版本是2.4.6。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题