Странная проблема с функцией from_utc_timestamp и часовыми поясами в Spark - PullRequest
1 голос
/ 03 августа 2020

A есть странная проблема с преобразованием даты, прочитанной из файла json в формат ut c. Я Хорватия (часовой пояс Европа / Загреб). Когда я открываю файл JSON со значениями UT C datetime (пример), в зависимости от того, где я его открываю, я получаю разные результаты для одного и того же кода.

Пример:

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")

Когда Я запускаю его в блокноте jupyter на AWS в Европе (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, я получу следующие результаты ( все неверно, но Франкфурт ):

+------------------------+-------------------+-------------------+-------------------+-------------------+
|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_timestamp (to_timestamp (col ("start")) и с from_utc_timestamp (col ("start")) и это не имеет значения.

Кто-нибудь знает, о чем это? Кажется, что если я попытаюсь преобразовать UT C в местное время в той же зоне, в которой я нахожусь, я получаю неверные результаты ...

Версия Spark - 2.4.6.

...