错误:无法找到 py4j,您的 SPARK_HOME 可能配置不正确

Posted

技术标签:

【中文标题】错误:无法找到 py4j,您的 SPARK_HOME 可能配置不正确【英文标题】:ERROR: Unable to find py4j, your SPARK_HOME may not be configured correctly 【发布时间】:2020-12-13 18:55:03 【问题描述】:

我无法在 Jupyter 笔记本中导入以下内容。

findspark.init('home/ubuntu/spark-3.0.0-bin-hadoop3.2')

收到以下错误:

    ---------------------------------------------------------------------------
~/.local/lib/python3.6/site-packages/findspark.py in init(spark_home, python_path, edit_rc, edit_profile)
    144     except IndexError:
    145         raise Exception(
--> 146             "Unable to find py4j, your SPARK_HOME may not be configured correctly"
    147         )
    148     sys.path[:0] = [spark_python, py4j]

Exception: Unable to find py4j, your SPARK_HOME may not be configured correctly

我确实安装了 py4j,并且还尝试将以下这些行添加到 ~/.bashrc

export SPARK_HOME=/home/ubuntu/spark-3.0.0-bin-hadoop3.2
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH

【问题讨论】:

你尝试过其他版本的 spark 吗? 【参考方案1】:

检查您安装的 spark 版本是否与您在 SPARK_HOME 名称下声明的相同

例如(在 Google Colab 中),我已经安装了:

!wget -q https://downloads.apache.org/spark/spark-3.0.1/spark-3.0.1-bin-hadoop3.2.tgz

然后我声明:

os.environ["SPARK_HOME"] = "/content/spark-3.0.1-bin-hadoop3.2"

spark-3.0.1-bin-hadoop3.2两个地方一定要一样

【讨论】:

返回同样的问题! 仔细检查您现在使用的版本。从那以后肯定有一些更新 这对我有用。确保两行中的版本相同。【参考方案2】:

错误消息表明findinit 无法找到您的SPARK_HOME 目录。

我查看了findinit 的源代码,这是一个非常简单的错误。

背景

代码所做的第一件事是指定变量spark_python 是您的SPARK_HOME 路径,后跟/python

接下来,代码使用glob 模块查找py4j 路径,该模块会找到与os.path.join(spark_python,"lib","py4j-*.zip") 模式匹配的所有路径名,在您的情况下应该等于/home/ubuntu/spark-3.0.0-bin-hadoop3.2/python/lib/py4j-0.10.7-src.zip(我根据我的,所以你的可能会略有不同)。现在,它通过选择第一个元素从 glob 操作返回的列表中获取 py4j 路径。这就是错误是 IndexError 的原因,它发生在 py4j 路径不存在时,它本身仅依赖于正确指定 SPARK_HOME。

解决问题

唯一的罪魁祸首是 SPARK_HOME 的规范,正如您所说,它是从 ~/.bashrc 文件中读入环境变量的。所以要检查的三件事是:

    您的 SPARK_HOME 路径正确(检查它是否存在) 您在/home/ubuntu/spark-3.0.0-bin-hadoop3.2/python/lib/ 中有一个 py4j .zip 文件 在 ~/.bashrc 文件中的 SPARK_HOME 路径规范中没有任何格式问题

我在导出的路径周围使用引号,例如export SPARK_HOME="/home/ubuntu/spark-3.0.0-bin-hadoop3.2" 但我不确定这是否会有所不同。

【讨论】:

以上是关于错误:无法找到 py4j,您的 SPARK_HOME 可能配置不正确的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 错误:py4j.java_gateway:尝试连接到 Java 服务器时发生错误(127.0.0.1:50532)

如何隐藏“py4j.java_gateway:Received command c on object id p0”?

py4J 最简单的例子

结构化流错误 py4j.protocol.Py4JNetworkError:Java 端的答案为空

ModuleNotFoundError:没有名为“py4j”的模块

Dataframe_image OsError:无法在您的计算机上找到 Chrome 可执行文件