pandasUDF i pyarrow 0.15.0

12

Niedawno zacząłem otrzymywać błędy w wielu pysparkzadaniach uruchomionych w klastrach EMR. Errosy są

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

Wszystkie wydają się występować w applyfunkcjach serii pand. Jedyną znalezioną przeze mnie zmianą jest pyarrowaktualizacja w sobotę (05.10.2019). Testy wydają się działać z 0.14.1

Moje pytanie brzmi więc, czy ktoś wie, czy jest to błąd w nowej zaktualizowanej ptaszarni, czy jest jakaś znacząca zmiana, która utrudni korzystanie z pandasUDF w przyszłości?

ilijaluve
źródło

Odpowiedzi:

15

To nie jest błąd. Wprowadziliśmy ważną zmianę protokołu w wersji 0.15.0, która powoduje, że domyślne zachowanie pyarrow jest niezgodne ze starszymi wersjami Arrow w Javie - twoje środowisko Spark wydaje się używać starszej wersji.

Twoje opcje są

  • Ustaw zmienną środowiskową ARROW_PRE_0_15_IPC_FORMAT=1 z której używasz języka Python
  • Na razie zmień wersję na pyarrow <0.15.0.

Mamy nadzieję, że wkrótce społeczność Spark będzie mogła zaktualizować Javę do wersji 0.15.0, więc ten problem zniknie.

Jest to omówione w http://arrow.apache.org/blog/2019/10/06/0.15.0-release/

Wes McKinney
źródło