Преобразование часового пояса с pyspark из отметки времени и страны - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь преобразовать дату UTC в дату с местным часовым поясом (используя страну) с помощью PySpark.У меня есть страна в виде строки, а дата в качестве временной отметки

Итак, ввод:

date = Timestamp('2016-11-18 01:45:55') # type is pandas._libs.tslibs.timestamps.Timestamp

country = "FR" # Type is string

import pytz
import pandas as pd

def convert_date_spark(date, country):
    timezone = pytz.country_timezones(country)[0]

    local_time = date.replace(tzinfo = pytz.utc).astimezone(timezone)
    date, time = local_time.date(), local_time.time()

    return pd.Timestamp.combine(date, time)

# Then i'm creating an UDF to give it to spark

convert_date_udf = udf(lambda x, y : convert_date_spark(x, y), TimestampType())

ТогдаЯ использую его в функции, которая подает искру:

data = data.withColumn("date", convert_date_udf(data["date"], data["country"]))

Я получил следующую ошибку:

TypeError: аргумент tzinfo должен быть None или подкласса tzinfo, а не type 'str '

Ожидаемый вывод - это дата с тем же форматом

Как было проверено на python, функции _convert_date_spark_ работают, но в pyspark это не работает

enter image description here

Не могли бы вы помочь мне найти решение для этого?

Спасибо

1 Ответ

0 голосов
/ 13 декабря 2018

Используйте tzinfo экземпляр, а не string в качестве часового пояса.

>>> timezone_name = pytz.country_timezones(country)[0]
>>> timezone_name
'Europe/Paris'
>>> timezone = pytz.timezone(timezone_name)
>>> timezone
<DstTzInfo 'Europe/Paris' LMT+0:09:00 STD>
>>> 
...