Py4JJavaError:调用时发生错误
Posted
技术标签:
【中文标题】Py4JJavaError:调用时发生错误【英文标题】:Py4JJavaError: An error occurred while calling 【发布时间】:2019-06-29 23:40:24 【问题描述】:我是 PySpark 的新手。我一直在用测试样本编写我的代码。一旦我在更大的文件(3gb 压缩)上运行代码。我的代码只是做一些过滤和连接。我不断收到有关 py4J 的错误。
任何帮助都会很有用,我们将不胜感激。
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
ss = SparkSession \
.builder \
.appName("Example") \
.getOrCreate()
ss.conf.set("spark.sql.execution.arrow.enabled", 'true')
df = ss.read.csv(directory + '/' + filename, header=True, sep=",")
# Some filtering and groupbys...
df.show()
返回
Py4JJavaError: An error occurred while calling o88.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in
stage 3.0 failed 1 times, most recent failure: Lost task 0.0 in stage 3.0 (TID
1, localhost, executor driver): java.lang.OutOfMemoryError: Java heap space
...
Caused by: java.lang.OutOfMemoryError: Java heap space
更新: 我使用的是 py4j 10.7,刚刚更新到 10.8
UPDATE(1):添加 spark.driver.memory:
ss = SparkSession \
.builder \
.appName("Example") \
.config("spark.driver.memory", "16g")\
.getOrCreate()
汇总返回错误:
ERROR:py4j.java_gateway:An error occurred while trying to connect to the Java server (127.0.0.1:38004)
py4j.protocol.Py4JNetworkError: Answer from Java side is empty
"Error while receiving", e, proto.ERROR_ON_RECEIVE)
py4j.protocol.Py4JNetworkError: Error while receiving
Py4JError
Py4JError: An error occurred while calling o94.showString
UPDATE(2) :我通过更改 spark-defaults.conf 文件进行了尝试。仍然出现错误PySpark: java.lang.OutofMemoryError: Java heap space
半解决:这似乎是一个普遍的内存问题。我启动了一个具有 32g 内存的 2xlarge 实例。该程序运行没有错误。
知道了这一点,还有其他什么可以提供帮助的 conf 选项,这样我就不必运行昂贵的实例了吗?
谢谢大家。
【问题讨论】:
驱动分配了多少内存? @SurajRamesh 我正在使用 aws 云。我用过这个 .config("spark.executor.memory", "16g")。没有什么不同。 尝试将spark.driver.memory
设置为16g
。你可以为较小的数据集工作吗? .config("spark.driver.memory", "16g")
@GeneticsGuy 我听取了你的建议,得到了另一个错误:Py4JError: An error occurred while calling o94.showString
您可能需要发布您正在使用的过滤和分组方法。 Spark 的惰性求值会导致最后一个方法显示错误消息,而原因是较早的方法。
【参考方案1】:
这是通过 conda 安装的 pyspark 2.4.0 的当前问题。您需要通过 conda 提示符或 Linux 终端降级到 pyspark 2.3.0:
conda install pyspark=2.3.0
【讨论】:
【参考方案2】:您可能没有正确的权限。
当我使用 docker 镜像 jupyter/pyspark-notebook
运行 pyspark 的示例代码时,我遇到了同样的问题,并且通过在容器中使用 root 解决了。
任何也使用该图像的人都可以找到一些提示here。
【讨论】:
以上是关于Py4JJavaError:调用时发生错误的主要内容,如果未能解决你的问题,请参考以下文章
pyspark结构化流kafka - py4j.protocol.Py4JJavaError:调用o41.save时发生错误
Py4JJavaError:调用 None.org.apache.spark.api.java.JavaSparkContext 时出错
当两个应用程序同时访问一个localspark会话实例时发生错误。调用o2402.defaultParallelism
Py4JJavaError:在尝试将 rdd 数据帧写入本地目录上的镶木地板文件时调用 o389.parquet 时发生错误
Pyspark 错误:“Py4JJavaError:调用 o655.count 时出错。”在数据帧上调用 count() 方法时
Py4JJavaError:调用 o45.load 时出错。 :java.lang.NoClassDefFoundError:org/apache/spark/sql/sources/v2/Strea