pandas 简单示例的 udf showString 错误

pandas udf showString error on simplistic example

我开始在 Pyspark Jupyter 笔记本上使用 pandas udf 运行ning 在 EMR 集群上使用这个 'identity' pandas udf 我是出现以下错误:

@pandas_udf(df.schema, PandasUDFType.GROUPED_MAP)
# Input/output are both a pandas.DataFrame
def pudf(pdf):

    return pdf

df.filter(df.corp_cust=='LO').groupby('corp_cust').apply(pudf).show()

An error occurred while calling o388.showString. : org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 113.0 failed 4 times, most recent failure: Lost task 0.3 in stage 113.0 (TID 1666, ip-10-23-226-64.us.scottsco.com, executor 1): 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)

我可以 运行 df.filter(df.corp_cust=='LO').show() 成功,所以这让我觉得事情是 'braking' 从 pandas 到 pyspark 数据帧的翻译。

此数据框有几个 StringType 和 DecimalType 列。我也尝试在 udf 中将字符串列编码为 'utf-8' 并得到相同的错误。

关于如何解决这个问题有什么建议吗?

这显然是 pyarrow 版本 0.15 的一个问题[1],它会导致 pandads udf 通过错误。您可以尝试通过安装 Pyarrow 0.14.1 或更低版本来更改版本。

  sc.install_pypi_package("pyarrow==0.14.1") 

[1]https://issues.apache.org/jira/browse/SPARK-29367