Ошибка Pandas udf в EMR: класс «io.netty.buffer.ArrowBuf»‘

#apache-spark #pyspark #amazon-emr #pyarrow

#apache-spark #pyspark #amazon-emr #pyarrow

Вопрос:

Я пытаюсь использовать pandas udf на ноутбуке Jupyter в AWS EMR, но безрезультатно. Сначала я попытался использовать функцию, которую я сделал, но я не мог заставить ее работать, поэтому я попробовал несколько примеров ответов на другие вопросы, которые я нашел здесь, но я все еще не мог заставить ее работать. Я попробовал этот код:

 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 и получаю ту же ошибку. Я также использовал другие коды из ответов по этой теме, и результат был тот же.

В сценарии начальной загрузки у меня есть строка установки pip следующим образом:

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

Я пробовал с pyarrow 0.15.1, но ничего не изменилось.
Есть ли у вас какие-либо идеи, что вызывает эту ошибку? Спасибо!

Комментарии:

1. Создание pdf [[‘code’]] вы выбираете этот столбец в dataframe. При создании groupby вам необходимо выполнить агрегацию (например, среднее или сумма). Что ты пытаешься сделать?

2. На самом деле, это код из другого поста с аналогичным вопросом, который был решен. Я не могу заставить это работать для моей функции или любой другой функции, и этот случай был опубликован в качестве простого примера. Я мог бы изменить функцию на сумму, и результат будет тот же.

Ответ №1:

Установите следующие версии

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