apache-spark - EMR 上的 Pandas udf 错误:类“io.netty.buffer.ArrowBuf”'
问题描述
我试图在 AWS EMR 上的 Jupyter 笔记本上使用 pandas udf 无济于事。首先,我尝试使用我所做的一个函数,但我无法让它工作,所以我尝试了一些我在这里找到的其他问题的答案示例,但我仍然无法让它工作。我试过这段代码:
from pyspark.sql.functions import pandas_udf, PandasUDFType
from pyspark.sql.types import *
import pyspark.sql.functions as F
import pyarrow
df = spark.createDataFrame([
(1, "A", "X1"),
(2, "B", "X2"),
(3, "B", "X3"),
(1, "B", "X3"),
(2, "C", "X2"),
(3, "C", "X2"),
(1, "C", "X1"),
(1, "B", "X1"),
], ["id", "type", "code"])
schema = StructType([
StructField("code", StringType()),
])
@F.pandas_udf(schema, F.PandasUDFType.GROUPED_MAP)
def dummy_udaf(pdf):
pdf = pdf[['code']]
return pdf
df.groupBy('type').apply(dummy_udaf).show()
我得到这个错误:
Caused by: java.lang.SecurityException: class "io.netty.buffer.ArrowBuf"'s signer information does not match signer information of other classes in the same package
我尝试不使用 import pyarrow,但我得到了同样的错误。我还使用了有关该主题的答案中的其他代码,结果是相同的。
在引导 shell 脚本中,我有一个 pip install 行,如下所示:
sudo python3 -m pip install pandas==0.24.2 pyarrow==0.14.1
我尝试过使用 pyarrow 0.15.1,但没有任何改变。你知道是什么导致了这个错误吗?谢谢!
解决方案
设置以下版本
sudo python3 -m pip install pyarrow==0.14 pandas==1.1.4
推荐阅读
- reactjs - 如何
功能? - regex - Reg 匹配以在 informatica 中搜索带有分隔符的特定字符串
- sql - 是什么导致错误“用户缺少权限或找不到对象:FieldName”
- html - 全宽导航,每个项目的动态宽度等于 100%
- vue.js - 在 vuejs 中通过 i18n 翻译整个组件
- sql - 从两个查询/子查询中减去结果
- mysql - 如何将 MySQL 中的自动增量计数器从 +1 更改为 +43
- react-native - React Native IOS,库链接不起作用
- javascript - 使用 detachPageDataLoaded 分离事件
- c# - 在 .NET Framework 中拦截 HTTP 调用以记录请求(带有请求正文)和响应