Pyspark 在简化的示例中,显示udf showString错误

Pyspark 在简化的示例中,显示udf showString错误,pyspark,jupyter,user-defined-functions,amazon-emr,Pyspark,Jupyter,User Defined Functions,Amazon Emr,我开始使用pandas udf在运行在EMR集群上的Pyspark Jupyter笔记本上使用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(p

我开始使用pandas udf在运行在EMR集群上的Pyspark Jupyter笔记本上使用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()
调用o388.showString时出错。 :org.apache.spark.SparkException:作业因阶段失败而中止:阶段113.0中的任务0失败4次,最近的失败:阶段113.0中的任务0.3丢失(TID 1666,ip-10-23-226-64.us.scottsco.com,执行者1):java.lang.IllegalArgumentException 位于java.nio.ByteBuffer.allocate(ByteBuffer.java:334) 位于org.apache.arrow.vector.ipc.message.MessageSerializer.readMessage(MessageSerializer.java:543) 在org.apache.arrow.vector.ipc.message.MessageChannelReader.readNext(MessageChannelReader.java:58) 位于org.apache.arrow.vector.ipc.ArrowStreamReader.readSchema(ArrowStreamReader.java:132)

我可以成功地运行
df.filter(df.corp_cust=='LO').show()
,所以这让我觉得从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]