最近、EMRクラスターで実行されている多数のpyspark
ジョブで多数のエラーが発生し始めました。エラーは
Java.lang.IllegalArgumentException
at Java.nio.ByteBuffer.allocate(ByteBuffer.Java:334)
at org.Apache.arrow.vector.ipc.message.MessageSerializer.readMessage(MessageSerializer.Java:543)
at org.Apache.arrow.vector.ipc.message.MessageChannelReader.readNext(MessageChannelReader.Java:58)
at org.Apache.arrow.vector.ipc.ArrowStreamReader.readSchema(ArrowStreamReader.Java:132)
at org.Apache.arrow.vector.ipc.ArrowReader.initialize(ArrowReader.Java:181)
at org.Apache.arrow.vector.ipc.ArrowReader.ensureInitialized(ArrowReader.Java:172)
at org.Apache.arrow.vector.ipc.ArrowReader.getVectorSchemaRoot(ArrowReader.Java:65)
at org.Apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:162)
at org.Apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:122)
at org.Apache.spark.api.python.BasePythonRunner$ReaderIterator.hasNext(PythonRunner.scala:406)
at org.Apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37)
at org.Apache.spark.sql.execution.python.ArrowEvalPythonExec$$anon$2.<init>(ArrowEvalPythonExec.scala:98)
at org.Apache.spark.sql.execution.python.ArrowEvalPythonExec.evaluate(ArrowEvalPythonExec.scala:96)
at org.Apache.spark.sql.execution.python.EvalPythonExec$$anonfun$doExecute$1.apply(EvalPythonExec.scala:127)...
これらはすべて、pandasシリーズのapply
関数で発生するようです。唯一の変更点は、pyarrow
が土曜日(05/10/2019)。テストは0.14.1で動作するようです
だから私の質問は、これが新しく更新されたpyarrowのバグであるか、または将来的にpandasUDFを使用しにくくするいくつかの重要な変更があるかどうかを誰かが知っているかどうかです。
バグではありません。 Java-あなたのSpark環境は古いバージョンを使用している。
あなたのオプションは
ARROW_PRE_0_15_IPC_FORMAT=1
を設定しますうまくいけば、Sparkコミュニティはすぐに0.15.0にJavaでアップグレードできるため、この問題は解消されます。
これは http://arrow.Apache.org/blog/2019/10/06/0.15.0-release/ で議論されています