我正在尝试使用PySpark将UTC日期与本地时区(使用国家/地区)转换为日期。我将国家/地区作为字符串,日期作为时间戳
所以输入是:
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())
然后我在提供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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。