Функция unix_timestamp () изменяет час в Scala Spark

Я использую Spark 2.1.0 в unix и обнаружил странную проблему, когда unix_timestamp меняет час для одной конкретной временной метки, я создал фрейм данных, как показано ниже

Для 1-й записи в df2 имеется строка «20170312020200» в качестве строки, которую я позже преобразовал в метку времени в df3, часы должны быть 02, но вместо этого в df3 оно отображается как 03. Но у второй записи нет проблем с преобразованием строки в метку времени.

Этого не происходит, когда я запускаю приложение с помощью Intellij в локальной системе. Это также происходит в spark-submit, когда мы запускаем наше приложение.


person Himanshu    schedule 09.10.2017    source источник


Ответы (2)


12 марта 2017 г. 2:02 - недопустимое время для многих часовых поясов. Именно тогда в США началось летнее время и часы перешли с 1:59:59 на 3:00:00.

Я предполагаю, что ваша локальная машина и искровой кластер имеют разные системные настройки часового пояса.

person Joe K    schedule 09.10.2017
comment
Это имеет смысл, моя локальная система находится на GMT +5.30, а сервер - на EDT. - person Himanshu; 09.10.2017

Я использую Spark 2, вы можете увидеть следующие результаты, ваша проблема не связана с unix_timestamp или версией Spark, проверьте свои данные.

import org.apache.spark.sql.functions.unix_timestamp

val df2 = sc.parallelize(Seq(
      (10, "date", "20170312020200"), (10, "date", "20170312050200"))
    ).toDF("id ", "somthing ", "datee")

df2.show()

val df3=df2.withColumn("datee", unix_timestamp($"datee", "yyyyMMddHHmmss").cast("timestamp"))


df3.show()  



+---+---------+--------------+
|id |somthing |         datee|
+---+---------+--------------+
| 10|     date|20170312020200|
| 10|     date|20170312050200|
+---+---------+--------------+

+---+---------+-------------------+
|id |somthing |              datee|
+---+---------+-------------------+
| 10|     date|2017-03-12 02:02:00|
| 10|     date|2017-03-12 05:02:00|
+---+---------+-------------------+

import org.apache.spark.sql.functions.unix_timestamp
df2: org.apache.spark.sql.DataFrame = [id : int, somthing : string ... 1 more field]
df3: org.apache.spark.sql.DataFrame = [id : int, somthing : string ... 1 more field]
person vaquar khan    schedule 09.10.2017