Python 使用pyspark从时间戳和国家/地区转换时区
我正在尝试使用PySpark将UTC日期转换为具有本地时区(使用国家/地区)的日期。 我将国家作为字符串,日期作为时间戳 因此,输入是:Python 使用pyspark从时间戳和国家/地区转换时区,python,apache-spark,pyspark,user-defined-functions,Python,Apache Spark,Pyspark,User Defined Functions,我正在尝试使用PySpark将UTC日期转换为具有本地时区(使用国家/地区)的日期。 我将国家作为字符串,日期作为时间戳 因此,输入是: date=Timestamp('2016-11-18 01:45:55')#类型为pandas。_libs.tslibs.Timestamp.Timestamp country=“FR”#类型为字符串 import pytz import pandas as pd def convert_date_spark(date, country): time
date=Timestamp('2016-11-18 01:45:55')#类型为pandas。_libs.tslibs.Timestamp.Timestamp
country=“FR”#类型为字符串
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())
然后我在为spark提供信息的函数中使用它:
data = data.withColumn("date", convert_date_udf(data["date"], data["country"]))
我得到了以下错误:
TypeError:tzinfo参数必须为None或tzinfo子类,而不是类型“str”
预期输出是具有相同格式的日期
正如用python测试的那样,_convert_date_spark_函数可以工作,但在pyspark中不起作用
你能帮我找到解决办法吗
谢谢使用
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>
>>>
时区名称=pytz.country\u时区(国家)[0]
>>>时区名称
“欧洲/巴黎”
>>>时区=pytz.timezone(时区名称)
>>>时区
>>>