Разные результаты разбора одной и той же даты в Windows и Linux - PullRequest
1 голос
/ 24 мая 2019

Мы используем pyspark для анализа набора данных, содержащего столбцы даты, преобразованные в метку времени UTC, с кодом, который выглядит следующим образом:

from datetime import datetime

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, to_timestamp, to_utc_timestamp

session = (SparkSession
           .builder
           .appName('test_spark')
           .master('local[*]')
           .config('spark.sql.session.timeZone', 'UTC')
           .getOrCreate())
date_df = session.createDataFrame([{'date': '2017-10-29'}])
result_df = (date_df
             .withColumn('date', to_timestamp(col('date')))
             .withColumn('date', to_utc_timestamp(col('date'), 'Europe/Madrid')))
expected_df = session.createDataFrame([{'date': datetime(2017, 10, 29, 0, 0)}])
print("Expected")
print(expected_df.collect())
print("Result")
print(result_df.collect())

В Linux этот код печатается (регистрация Spark опущена):

Expected
[Row(date=datetime.datetime(2017, 10, 29, 0, 0))]
Result
[Row(date=datetime.datetime(2017, 10, 29, 0, 0))]

В Windows 10, однако, вывод:

Expected
[Row(date=datetime.datetime(2017, 10, 29, 0, 0))]
Result
[Row(date=datetime.datetime(2017, 10, 29, 1, 0))]

Как видите, в Windows проанализированная дата на 1 час больше, чем результат в Linux.

Я проверил это с OpenJDK JRE и Oracle JRE (всегда версия 8), но результат тот же.

Что, черт возьми, здесь происходит?Если я изменяю год или месяц дат, «ошибка» больше не возникает, похоже, она появляется только 29 октября 2017 года, что делает этот день таким особенным?

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