Прежде всего, я прошу прощения, если моя проблема проста. Я провел много времени, исследуя это.
Я пытаюсь настроить скалярную 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) ...
Что мне здесь не хватает? Я просто следую инструкции. Спасибо за вашу помощь