【问题标题】:Pandas udf error on EMR: class "io.netty.buffer.ArrowBuf"'EMR 上的 Pandas udf 错误:类“io.netty.buffer.ArrowBuf”'
【发布时间】:2021-03-27 05:26:56
【问题描述】:

我正在尝试在 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,但没有任何改变。 你知道是什么导致了这个错误吗?谢谢!

【问题讨论】:

  • 制作 pdf[['code']] 您正在数据框中选择此列。制作 groupby 时,您需要进行聚合(例如平均值或总和)。你想做什么?
  • 实际上,这是另一篇帖子中的代码,已解决了类似的问题。我不能让它适用于我的功能或任何功能,这个案例是作为一个简单的例子发布的。我可以将函数更改为求和,结果是一样的。

标签: apache-spark pyspark amazon-emr pyarrow


【解决方案1】:

设置以下版本

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2016-08-23
    • 2018-09-01
    相关资源
    最近更新 更多