pandasUDF y pyarrow 0.15.0

12

Recientemente comencé a recibir un montón de errores en varios pysparktrabajos que se ejecutan en clústeres EMR. Los erros son

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

Todos parecen suceder en applyfunciones de una serie de pandas. El único cambio que encontré es que pyarrowse actualizó el sábado (10/05/2019). Las pruebas parecen funcionar con 0.14.1

Entonces, mi pregunta es si alguien sabe si esto es un error en el nuevo pyarrow actualizado o si hay algún cambio significativo que haga que pandasUDF sea difícil de usar en el futuro.

ilijaluve
fuente

Respuestas:

15

No es un error. Realizamos un cambio de protocolo importante en 0.15.0 que hace que el comportamiento predeterminado de pyarrow sea incompatible con versiones anteriores de Arrow en Java: su entorno de Spark parece estar usando una versión anterior.

Sus opciones son

  • Establezca la variable de entorno ARROW_PRE_0_15_IPC_FORMAT=1desde donde está utilizando Python
  • Bajar de categoría a pyarrow <0.15.0 por ahora.

Esperemos que la comunidad de Spark pueda actualizar a 0.15.0 en Java pronto para que este problema desaparezca.

Esto se discute en http://arrow.apache.org/blog/2019/10/06/0.15.0-release/

Wes McKinney
fuente