开发者社区> 问答> 正文

使用来自时间戳和国家/地区的pyspark进行时区转换

我正在尝试使用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中不起作用

展开
收起
社区小助手 2018-12-21 13:35:01 3421 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    使用tzinfo实例而不是string时区。

    timezone_name = pytz.country_timezones(country)[0]
    timezone_name
    'Europe/Paris'
    timezone = pytz.timezone(timezone_name)
    timezone

    2019-07-17 23:23:23
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载