web-dev-qa-db-ja.com

pandasUDFおよびpyarrow 0.15.0

最近、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を使用しにくくするいくつかの重要な変更があるかどうかを誰かが知っているかどうかです。

11
ilijaluve

バグではありません。 Java-あなたのSpark環境は古いバージョンを使用している。

あなたのオプションは

  • Pythonを使用している場所から環境変数ARROW_PRE_0_15_IPC_FORMAT=1を設定します
  • 現時点では、pyarrow <0.15.0にダウングレードしてください。

うまくいけば、Sparkコミュニティはすぐに0.15.0にJavaでアップグレードできるため、この問題は解消されます。

これは http://arrow.Apache.org/blog/2019/10/06/0.15.0-release/ で議論されています

12
Wes McKinney