pandasUDF e pyarrow 0.15.0

12

Recentemente, comecei a receber vários erros em vários pysparktrabalhos em execução em clusters de EMR. Os erros são

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

Todos eles parecem acontecer em applyfunções de uma série de pandas. A única alteração que encontrei pyarrowfoi atualizada no sábado (10/05/2019). Os testes parecem funcionar com 0.14.1

Então, minha pergunta é: se alguém souber se isso é um bug no novo pirarito atualizado ou se há alguma mudança significativa que tornará o pandasUDF difícil de usar no futuro?

ilijaluve
fonte

Respostas:

15

Não é um bug. Fizemos uma importante alteração de protocolo na 0.15.0 que torna o comportamento padrão do pyarrow incompatível com versões mais antigas do Arrow em Java - seu ambiente Spark parece estar usando uma versão mais antiga.

Suas opções são

  • Defina a variável de ambiente ARROW_PRE_0_15_IPC_FORMAT=1de onde você está usando Python
  • Faça o downgrade para pyarrow <0.15.0 por enquanto.

Esperamos que a comunidade Spark possa atualizar para 0.15.0 em Java em breve, para que esse problema desapareça.

Isso é discutido em http://arrow.apache.org/blog/2019/10/06/0.15.0-release/

Wes McKinney
fonte