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

如何解决错误:找不到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,它也可以解决问题。 使用相同的代码..

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?