pandasUDF et pyarrow 0.15.0

12

J'ai récemment commencé à obtenir un tas d'erreurs sur un certain nombre de pysparktravaux exécutés sur des clusters EMR. Les erros sont

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

Ils semblent tous se produire dans les applyfonctions d'une série de pandas. Le seul changement que j'ai trouvé est celui qui pyarrowa été mis à jour samedi (05/10/2019). Les tests semblent fonctionner avec 0.14.1

Donc, ma question est de savoir si quelqu'un sait s'il s'agit d'un bug dans la nouvelle pyarrow mise à jour ou s'il y a un changement important qui rendra pandasUDF difficile à utiliser à l'avenir?

ilijaluve
la source

Réponses:

15

Ce n'est pas un bug. Nous avons apporté un changement de protocole important dans 0.15.0 qui rend le comportement par défaut de pyarrow incompatible avec les anciennes versions de Arrow en Java - votre environnement Spark semble utiliser une version plus ancienne.

Vos options sont

  • Définissez la variable d'environnement ARROW_PRE_0_15_IPC_FORMAT=1d'où vous utilisez Python
  • Rétrograder en pyarrow <0.15.0 pour l'instant.

Espérons que la communauté Spark sera bientôt en mesure de passer à 0.15.0 en Java, ce problème disparaîtra.

Ceci est discuté dans http://arrow.apache.org/blog/2019/10/06/0.15.0-release/

Wes McKinney
la source