我开始使用此“身份” 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()
,所以这让我认为事情在从熊猫到pyspark数据框的转换中正在“刹车”。
此数据框具有几个StringType和DecimalType列。我还尝试过在udf中将字符串列编码为'utf-8'并得到相同的错误。
关于如何解决此问题的任何建议?
答案 0 :(得分:1)
这显然是pyarrow版本0.15的问题[1],它导致熊猫udf通过错误。您可以尝试通过安装Pyarrow 0.14.1或更低版本来更改版本。
sc.install_pypi_package("pyarrow==0.14.1")