Pandas UDF 在 EMR 上出错:类“io.netty.buffer.ArrowBuf”

3

我试图在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

我尝试过不导入pyarrow库,但是我仍然得到了相同的错误。我还使用了一些来自有关此主题的答案的其他代码,结果也是相同的。

在引导 shell 脚本中,我有一行 pip install 代码如下:

sudo python3 -m pip install pandas==0.24.2 pyarrow==0.14.1

我已经尝试了pyarrow 0.15.1,但是没有任何改变。

你有任何想法是什么导致了这个错误吗?谢谢!


制作pdf[['code']]时,您正在选择数据框中的此列。进行分组时,您需要进行聚合(例如平均值或总和)。您想要做什么? - Shadowtrooper
实际上,这是另一个帖子中的代码,该帖子有类似的问题并已解决。我无法使其适用于我的函数或任何函数,并且此案例被发布为简单示例。我可以将函数更改为求和,结果相同。 - Matheus Cammarosano Hidalgo
1个回答

0

设置以下版本

sudo python3 -m pip install pyarrow==0.14 pandas==1.1.4


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接