[pandas] pandasUDF와 pyarrow 0.15.0

최근 pysparkEMR 클러스터에서 실행 되는 여러 작업에서 많은 오류가 발생하기 시작했습니다 . 침식은

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토요일 (2019 년 10 월 10 일)에 업데이트되었다는 것입니다. 테스트는 0.14.1에서 작동하는 것 같습니다

그래서 내 질문은 이것이 새로운 업데이트 된 pyarrow의 버그인지 아는 사람이거나 나중에 pandasUDF를 사용하기 어려운 중대한 변화가 있습니까?



답변

버그가 아닙니다. 우리는 pyarrow의 기본 동작이 Java의 이전 버전의 Arrow와 호환되지 않도록 0.15.0에서 중요한 프로토콜을 변경했습니다 .Spark 환경은 이전 버전을 사용하는 것 같습니다.

당신의 옵션은

  • ARROW_PRE_0_15_IPC_FORMAT=1파이썬을 사용하는 곳 에서 환경 변수 를 설정하십시오.
  • 현재 pyarrow <0.15.0으로 다운 그레이드하십시오.

다행스럽게도 Spark 커뮤니티가 Java에서 곧 0.15.0으로 업그레이드 할 수 있기 때문에이 문제는 사라질 것입니다.

이것은 http://arrow.apache.org/blog/2019/10/06/0.15.0-release/ 에서 논의됩니다.


답변