web-dev-qa-db-fra.com

pandasUDF et pyarrow 0.15.0

J'ai récemment commencé à obtenir un tas d'erreurs sur un certain nombre de travaux pyspark 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 fonctions apply d'une série pandas. Le seul changement que j'ai trouvé est que pyarrow a é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 bogue dans la nouvelle mise à jour de pyarrow ou s'il y a un changement important qui rendra pandasUDF difficile à utiliser à l'avenir?

11
ilijaluve

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 dans Java - votre Spark environnement semble utiliser une ancienne version.

Vos options sont

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

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

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

12
Wes McKinney