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?
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
ARROW_PRE_0_15_IPC_FORMAT=1
d'où vous utilisez PythonEspé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/