嗨Maven,我被一个问题卡住了,如果我使用ZoneInfo从python zoneinfo包的日期得到预期的转换,但是,当我使用相同的代码下Sparkudf它抛出错误“没有时区发现关键欧洲/布鲁塞尔”.请帮帮我。下面是代码:
工作python代码:
from zoneinfo import ZoneInfo
conv_dt = datetime.strptime('2038.01.09 00:00:00', '%Y.%m.%d %H%M%S').astimezone(ZoneInfo('Europe/Brussels'))
SPARK自定义项下的代码相同,无法工作创建框架:
sample_df = spark.createDataFrame(['2038.01.09 00:00:00'], StringType()).toDF('sampledate')
udf声明:
def test_udf(sd):
return datetime.strptime(sd, '%Y.%m.%d %H%M%S').astimezone(ZoneInfo('Europe/Brussels'))
调用udf:
x = udf(test_udf, TimeStamp())
cast_df = sample_df.withColumns('sampledate',x(sample_df['sampledate']))
cast_df.show()
错误:File“...lib/python3.9/zoneinfo/_common.py”,line 24 in load_tzdata raise
ZoneInfoNotFoundError:“No timezone found with key Europe/布鲁塞尔”
谢谢你,谢谢
1条答案
按热度按时间wn9m85ua1#
您面临的问题可能与Spark UDF与zoneinfo等外部Python包的工作方式有关。当您在Spark UDF中使用
zoneinfo
时,它需要对Spark worker可用。对于故障排除,以下是解决问题的一些步骤:1.确保所有Spark worker节点上都安装了zoneinfo包。你可以使用pip或软件包管理器来安装它。您可能需要管理访问权限才能在工作节点上安装包。
1.确保
zoneinfo
包可以在Spark UDF中导入。为此,您可以在UDF函数的开头包含ZoneInfo
的import语句。您可以通过以下方式执行此操作: