pandasUDF und pyarrow 0.15.0

12

Ich habe vor kurzem eine Reihe von Fehlern bei einer Reihe von pysparkJobs erhalten, die auf EMR-Clustern ausgeführt werden. Die Fehler sind

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)...

Sie scheinen alle in applyFunktionen einer Pandas-Serie vorzukommen . Die einzige Änderung, die ich gefunden habe, ist die, pyarrowdie am Samstag (10.05.2019) aktualisiert wurde. Tests scheinen mit 0.14.1 zu funktionieren

Meine Frage ist also, ob jemand weiß, ob dies ein Fehler im neuen aktualisierten Pyarrow ist oder ob es eine signifikante Änderung gibt, die die Verwendung von pandasUDF in Zukunft schwierig macht.

ilijaluve
quelle

Antworten:

15

Es ist kein Fehler. Wir haben in 0.15.0 eine wichtige Protokolländerung vorgenommen, die das Standardverhalten von Pyarrow mit älteren Versionen von Arrow in Java nicht kompatibel macht. Ihre Spark-Umgebung scheint eine ältere Version zu verwenden.

Ihre Optionen sind

  • Legen Sie die Umgebungsvariable fest, ARROW_PRE_0_15_IPC_FORMAT=1von der aus Sie Python verwenden
  • Vorerst auf Pyarrow <0,15.0 herabstufen.

Hoffentlich kann die Spark-Community bald ein Upgrade auf 0.15.0 in Java durchführen, damit dieses Problem behoben wird.

Dies wird unter http://arrow.apache.org/blog/2019/10/06/0.15.0-release/ erläutert.

Wes McKinney
quelle