сбой преобразования метки времени искры - PullRequest
0 голосов
/ 11 июня 2018

У меня есть набор данных CSV со следующими двумя столбцами:

scala> df2.select(col("_c1"), col("_c2")).show
+-------------------+-------------------+
|                _c1|                _c2|
+-------------------+-------------------+
|2018-01-01 00:00:00|2018-03-11 01:59:59|
|2015-10-24 21:00:00|2015-11-01 01:59:59|
|2017-03-12 02:00:00|2017-03-25 19:59:59|
|2015-10-24 21:00:00|2015-11-01 01:59:59|
|2017-03-12 02:00:00|2017-03-25 19:59:59|
+-------------------+-------------------+

, и я пытаюсь преобразовать столбец в TimestampType:

df2.select(unix_timestamp(col("_c1"), "yyyy-MM-dd HH:mm:ss").cast(TimestampType).as("c1"), unix_timestamp(col("_c2"), "yyyy-MM-dd HH:mm:ss").cast(TimestampType).as("c2")).show
+-------------------+-------------------+
|                 c1|                 c2|
+-------------------+-------------------+
|2018-01-01 00:00:00|2018-03-11 01:59:59|
|2015-10-24 21:00:00|2015-11-01 01:59:59|
|               null|2017-03-25 19:59:59|
|2015-10-24 21:00:00|2015-11-01 01:59:59|
|               null|2017-03-25 19:59:59|
+-------------------+-------------------+

Как видите, яполучать нули во время преобразования.Информация об окружающей среде: - Местный часовой пояс CDT.- Версия Spark 2.2.0

Единственный случай, когда я не получаю нулевые значения, это когда я устанавливаю часовой пояс в формате UTC.

Есть предложения по сужению вопроса?

1 Ответ

0 голосов
/ 11 июня 2018

Это может быть не полный ответ, но является объяснением нулей.

Это работает, как и ожидалось, поскольку "нулевые" значения наблюдаются, когда для часового пояса установлено значение CDT.Обратите внимание, что часовой пояс CDT учитывает переход на летнее время, что означает " местное время меняется в 02:00 по местному времени на 03:00 по местному летнему времени во второе воскресенье марта "

В вашем случае«2017-03-12 02:00:00» - это второе воскресенье марта, поэтому само время является недействительным, если для часового пояса установлено значение CDT.Также будет наблюдаться нулевое значение, если время находится между «2017-03-12 02:00:00» и «2017-03-12 02:59:59»

Ссылка: 1] https://en.wikipedia.org/wiki/Central_Time_Zone

2] Поведение метки времени Spark: https://gist.github.com/squito/f348508ca7903ec2e1a64f4233e7aa70

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...