pandasUDF e pyarrow 0.15.0


12

Di recente ho iniziato a ricevere un sacco di errori su una serie di pysparklavori in esecuzione su cluster EMR. Gli errori sono

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

Sembrano tutti accadere nelle applyfunzioni di una serie di panda. L'unica modifica che ho riscontrato è pyarrowstata aggiornata sabato (05/10/2019). I test sembrano funzionare con 0.14.1

Quindi la mia domanda è se qualcuno sa se questo è un bug nel nuovo pyarrow aggiornato o c'è qualche cambiamento significativo che renderà difficile usare pandasUDF in futuro?

Risposte:


15

Non è un bug. Abbiamo apportato un'importante modifica del protocollo in 0.15.0 che rende incompatibile il comportamento predefinito di pyarrow con le versioni precedenti di Arrow in Java: l'ambiente Spark sembra utilizzare una versione precedente.

Le tue opzioni sono

  • Imposta la variabile di ambiente ARROW_PRE_0_15_IPC_FORMAT=1da dove stai usando Python
  • Esegui il downgrade a pyarrow <0.15.0 per ora.

Si spera che la community Spark sarà presto in grado di eseguire l'aggiornamento a 0.15.0 in Java, quindi questo problema scompare.

Questo è discusso in http://arrow.apache.org/blog/2019/10/06/0.15.0-release/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.