метка времени часового пояса в JDBC чтение / запись - PullRequest
0 голосов
/ 07 октября 2019

Я создаю файл паркета из чтения данных из Oracle.

Oracle работает в UTC. Я подтвердил использование

SELECT DBTIMEZONE FROM DUAL;

Вывод:

DBTIMEZONE|
----------|
+00:00    |

Чтение из JDBC и запись в S3 как паркет:

df = spark.read.format('jdbc').options(url=url,
                                           dbtable=query,
                                           user=user,
                                           password=password,
                                           fetchsize=2000).load()

df.write.parquet(s3_loc, mode="overwrite")

Теперь я проверил значение spark.sql.session.timeZone

print(spark.conf.get("spark.sql.session.timeZone"))

Вывод:

UTC

Теперь я читаю данные из местоположения S3:

df1 = spark.read.parquet(s3_loc)
df1.show()

Вывод:

+-------------------+
|             col1  |
+-------------------+
|2012-11-11 05:00:00|
|2013-11-25 05:00:00|
|2013-11-11 05:00:00|
|2014-12-25 05:00:00|
+-------------------+

col1 - это дата в oracle и преобразованная в метку времени в spark df.

Почему в вывод добавляется 5 часов? База данных работает в формате UTC, а spark.sql.session.timeZone - в формате UTC.

Примечание:

  1. RDS и EMR работают в AWS US-EAST-1
  2. На всех искровых узлах я выполнил TZ=UTC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...