错误:无法找到 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.protocol.Py4JNetworkError:Java 端的答案为空