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

问题描述

我无法在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

解决方法

错误消息表明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(我组成了py4j的版本号基于我的,因此您的版本可能会略有不同)。现在,通过选择第一个元素,从glob操作返回的列表中获取py4j路径。这就是为什么该错误为IndexError的原因,并且当py4j路径不存在时会发生,该路径本身仅依赖于正确指定的SPARK_HOME。

解决问题

唯一的罪魁祸首是SPARK_HOME的规范,正如您已经说过的那样,它是从〜/ .bashrc文件读取到环境变量中的。因此,要检查的三件事是:

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

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

,

检查所安装的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 在两个地方都必须相同

,

您可以使用 JupiterLab 代替 GoogleColab,它也可以解决问题。 使用相同的代码..

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...