Sus*_*098 11 python ubuntu py4j pyspark
我无法在 Jupyter 笔记本中运行以下导入。
findspark.init('home/ubuntu/spark-3.0.0-bin-hadoop3.2')
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
---------------------------------------------------------------------------
~/.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
Run Code Online (Sandbox Code Playgroud)
我确实安装了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
Run Code Online (Sandbox Code Playgroud)
小智 7
检查您安装的spark版本是否与您在SPARK_HOME名称下声明的版本相同
例如(在 Google Colab 中),我安装了:
!wget -q https://downloads.apache.org/spark/spark-3.0.1/spark-3.0.1-bin-hadoop3.2.tgz
Run Code Online (Sandbox Code Playgroud)
然后我声明:
os.environ["SPARK_HOME"] = "/content/spark-3.0.1-bin-hadoop3.2"
Run Code Online (Sandbox Code Playgroud)
看spark-3.0.1-bin-hadoop3.2在两个地方必须相同
该错误消息表明findinit无法找到您的SPARK_HOME目录。
我查看了源代码findinit,这是一个非常简单的错误。
背景
代码所做的第一件事是指定一个变量spark_python是您的 SPARK_HOME 路径,后跟/python.
接下来,代码使用该模块查找 py4j 路径,该模块会查找与您的情况应该等同的glob模式匹配的所有路径名(我根据我的版本号编写了 py4j 版本号,因此您的版本号可能略有不同)。现在,它通过选择第一个元素从 glob 操作返回的列表中获取 py4j 路径。这就是为什么错误是 IndexError 的原因,并且当 py4j 路径不存在时会发生这种情况,而 py4j 路径本身仅依赖于正确指定 SPARK_HOME 。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
解决问题
唯一的罪魁祸首是 SPARK_HOME 的规范,正如您所说,它是从 ~/.bashrc 文件中读入环境变量的。所以要检查的三件事是:
/home/ubuntu/spark-3.0.0-bin-hadoop3.2/python/lib/我在导出的路径周围使用引号,export SPARK_HOME="/home/ubuntu/spark-3.0.0-bin-hadoop3.2"但我不确定这是否会产生影响。
| 归档时间: |
|
| 查看次数: |
32198 次 |
| 最近记录: |