PySpark date_trun c изменяет часовой пояс: как это предотвратить? - PullRequest
0 голосов
/ 21 января 2020

Контекст: Я использую функцию date_trun c, импортированную из pyspark. sql .функции для усечения отметки времени до минут.

df_truncated = df.withColumn('dt', date_trunc('minute', df["timestamp"]))
df_truncated.show(truncate=False)

Выходные данные

+------------------------+-------------------+
|timestamp               |dt                 |
+------------------------+-------------------+
|2020-01-02T00:30:47.178Z|2020-01-02 02:30:00|
|2020-01-02T00:30:47.160Z|2020-01-02 02:30:00|
|2020-01-02T00:30:46.327Z|2020-01-02 02:30:00|
|2020-01-02T00:30:45.003Z|2020-01-02 02:30:00|
|2020-01-02T00:30:44.054Z|2020-01-02 02:30:00|
+------------------------+-------------------+

Проблема: Проблема в том, что он «добавляет» два часа к исходной отметке времени - конвертирует из ut c в местное время.

Вопрос: Как этого избежать? Нужно ли вручную обрезать временную метку или есть какой-то параметр для функции date_trun c, который не задокументирован? Или мне нужно получить доступ к глобальным настройкам spark и если да, то как или какие настройки?

1 Ответ

0 голосов
/ 21 января 2020

Можете ли вы попробовать это и дайте мне знать.

##  Here i am selecting the substring of the column "timestamp". Choose everthing till the seconds and convert that to a timestamp.

df.withColumn("hour", F.to_timestamp(F.substring("timestamp_value", 0, 19), "yyyy-MM-dd'T'HH:mm:ss")).show()

+-------------------------+-------------------+
|timestamp                |hour               |
+-------------------------+-------------------+
|2017-08-01T14:30:00+05:30|2017-08-01 14:30:00|
|2017-08-01T14:30:00+06:30|2017-08-01 14:30:00|
|2017-08-01T14:30:00+07:30|2017-08-01 14:30:00|
+-------------------------+-------------------+

Для некоторых других методов вы можете обратиться по ссылке: Ссылка

...