Pandas 用户定义函数 Py4JJavaError
Posted
技术标签:
【中文标题】Pandas 用户定义函数 Py4JJavaError【英文标题】:Pandas User-Defined Function Py4JJavaError 【发布时间】:2020-05-12 09:13:55 【问题描述】:我开始将@pandas_udf
用于 pyspark,在使用文档中的示例进行测试时,我发现了一个我无法解决的错误。
我运行的代码是:
from pyspark.sql import SparkSession
from pyspark.sql.functions import pandas_udf, PandasUDFType
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame(
[(1, 1.0), (1, 2.0), (2, 3.0), (2, 5.0), (2, 10.0)],
("id", "v"))
@pandas_udf("id long, v double", PandasUDFType.GROUPED_MAP)
def subtract_mean(pdf):
# pdf is a pandas.DataFrame
v = pdf.v
return pdf.assign(v=v - v.mean())
df.groupby("id").apply(subtract_mean).show()
我得到的错误是:
Py4JJavaError: An error occurred while calling o53.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 44 in stage 7.0 failed 1 times, most recent failure: Lost task 44.0 in stage 7.0 (TID 132, localhost, executor driver): java.lang.IllegalArgumentException: capacity < 0: (-1 < 0)
我正在使用:
pyspark 2.4.5
py4j 0.10.7
pyarrow 0.15.1
【问题讨论】:
【参考方案1】:这是使用PyArrow
版本> 0.15 和Spark 2.4.x
的问题,请点击此链接修复
https://issues.apache.org/jira/browse/SPARK-29367
【讨论】:
以上是关于Pandas 用户定义函数 Py4JJavaError的主要内容,如果未能解决你的问题,请参考以下文章
在 PySpark Pandas UDF 中指定用户定义函数的正确方法