pandasUDF та pyarrow 0.15.0


12

Нещодавно я почав отримувати купу помилок у ряді pysparkзавдань, що працюють на кластерах EMR. Помилки є

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

Вони, схоже, трапляються у applyфункціях серії панд. Єдина зміна, яку я знайшов - pyarrowоновлена ​​в суботу (05.10.2019). Тести, здається, працюють з 0.14.1

Отже, моє запитання, якщо хтось знає, чи це помилка в новому оновленому пірлі або чи є якась значна зміна, яка зробить pandasUDF важким у використанні в майбутньому?

Відповіді:


15

Це не помилка. Ми внесли важливу зміну протоколу в 0.15.0, яка робить поведінку піарроу за замовчуванням несумісним із старими версіями Arrow на Java - схоже, що ваше середовище Spark використовує старішу версію.

Ваші варіанти є

  • Встановіть змінну середовища, ARROW_PRE_0_15_IPC_FORMAT=1де ви використовуєте Python
  • Перехід до рівня пірроу <0,15,0 на даний момент.

Сподіваємось, незабаром спільнота Spark зможе оновитись до Java до 0,15,0, тому ця проблема відключається.

Про це йдеться в http://arrow.apache.org/blog/2019/10/06/0.15.0-release/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.