pandasUDF dan pyarrow 0.15.0

12

Saya baru-baru ini mulai mendapatkan banyak kesalahan pada sejumlah pysparkpekerjaan yang berjalan pada cluster ESDM. Para erro adalah

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

Semua itu tampaknya terjadi dalam applyfungsi seri panda. Satu-satunya perubahan yang saya temukan adalah yang pyarrowtelah diperbarui pada Sabtu (5/10/2019). Tes tampaknya berhasil dengan 0.14.1

Jadi pertanyaan saya adalah apakah ada yang tahu jika ini adalah bug di pyarrow yang baru diperbarui atau adakah perubahan signifikan yang akan membuat pandasUDF sulit digunakan di masa depan?

ilijaluve
sumber

Jawaban:

15

Itu bukan bug. Kami membuat perubahan protokol penting di 0.15.0 yang membuat perilaku default pyarrow tidak kompatibel dengan versi Arrow yang lama di Jawa - lingkungan Spark Anda tampaknya menggunakan versi yang lebih lama.

Pilihan Anda adalah

  • Setel variabel lingkungan ARROW_PRE_0_15_IPC_FORMAT=1dari tempat Anda menggunakan Python
  • Turunkan versi ke pyarrow <0,15.0 untuk saat ini.

Semoga komunitas Spark akan dapat meningkatkan ke 0.15.0 di Jawa segera sehingga masalah ini hilang.

Ini dibahas di http://arrow.apache.org/blog/2019/10/06/0.15.0-release/

Wes McKinney
sumber