Ошибка скалярной UDF панд, IllegalArgumentException - PullRequest
1 голос
/ 19 октября 2019

Прежде всего, я прошу прощения, если моя проблема проста. Я провел много времени, исследуя это.

Я пытаюсь настроить скалярную UDF Pandas в скрипте PySpark, как описано здесь .

Вот мой код:

from pyspark import SparkContext
from pyspark.sql import functions as F
from pyspark.sql.types import *
from pyspark.sql import SQLContext
sc.install_pypi_package("pandas")
import pandas as pd
sc.install_pypi_package("PyArrow")

df = spark.createDataFrame(
    [("a", 1, 0), ("a", -1, 42), ("b", 3, -1), ("b", 10, -2)],
    ("key", "value1", "value2")
)

df.show()

@F.pandas_udf("double", F.PandasUDFType.SCALAR)
def pandas_plus_one(v):
    return pd.Series(v + 1)

df.select(pandas_plus_one(df.value1)).show()
# Also fails
#df.select(pandas_plus_one(df["value1"])).show()
#df.select(pandas_plus_one("value1")).show()
#df.select(pandas_plus_one(F.col("value1"))).show()

Сценарий завершается с ошибкой при последнем утверждении:

Произошла ошибка при вызове o209.showString. : org.apache.spark.SparkException: задание прервано из-за сбоя этапа: задание 2 на этапе 8.0 не выполнено 4 раза, последний сбой: потерянное задание 2.3 на этапе 8.0 (TID 30, ip-10-160-2-53.ec2.internal, исполнитель 3): java.lang.IllegalArgumentException в java.nio.ByteBuffer.allocate (ByteBuffer.java:334) в org.apache.arrow.vector.ipc.message.MessageSerializer.readMessage (MessageSerializer.java:543) в org.apache.arrow.vector.ipc.message.MessageChannelReader.readNext (MessageChannelReader.java:58) в org.apache.arrow.vector.ipc.ArrowStreamReader.readSchema (ArrowStreamReader.java:132)в org.apache.arrow.vector.ipc.ArrowReader.initialize (ArrowReader.java:181) в org.apache.arrow.vector.ipc.ArrowReader.ensureInitialized (ArrowReader.java:172) в org.apache.arrow.vector.ipc.ArrowReader.getVectorSchemaRoot (ArrowReader.java:65) в org.apache.spark.sql.execution.python.ArrowPythonRunner $$ anon $ 1.read (ArrowPythonRunner.scala: 162) в org.apache.spark.sql.execution.python.ArrowPythonRunner $$ Анон $ 1.read (ArrowPythonRunner.scala: 122) в org.apache.spark.api.python.BasePythonRunner $ ReaderIterator.hasNext (PythonRunner.scala: 410) ...

Что мне здесь не хватает? Я просто следую инструкции. Спасибо за вашу помощь

1 Ответ

2 голосов
/ 19 октября 2019

5 октября Pyarrow выпустил новую версию 0.15, из-за которой pandas Udf выдает ошибку. Spark необходимо обновить, чтобы быть совместимым с этим (что может занять некоторое время). Вы можете следить за прогрессом здесь https://issues.apache.org/jira/projects/SPARK/issues/SPARK-29367?filter=allissues

Решение:

1) Вам необходимо установить Pyarrow 0.14.1 или ниже. (или) 2) Установите переменную среды ARROW_PRE_0_15_IPC_FORMAT = 1 , из которой вы используете Python

...