findspark.init() IndexError: 列表索引超出范围错误。

20
在Python 3.5 Jupyter环境中运行以下内容时,我收到下面的错误。有什么想法是什么导致了这个错误?
import findspark
findspark.init()

错误:

IndexError                                Traceback (most recent call
last) <ipython-input-20-2ad2c7679ebc> in <module>()
      1 import findspark
----> 2 findspark.init()
      3 
      4 import pyspark

/.../anaconda/envs/pyspark/lib/python3.5/site-packages/findspark.py in init(spark_home, python_path, edit_rc, edit_profile)
    132     # add pyspark to sys.path
    133     spark_python = os.path.join(spark_home, 'python')
--> 134     py4j = glob(os.path.join(spark_python, 'lib', 'py4j-*.zip'))[0]
    135     sys.path[:0] = [spark_python, py4j]
    136 

IndexError: list index out of range
4个回答

21

这很可能是因为您的系统上未正确设置SPARK_HOME环境变量。或者,您可以在初始化findspark时直接指定它:

import findspark
findspark.init('/path/to/spark/home')

之后,它应该都能正常工作!


这个有效,感谢解决方案!请问您能否解释一下这两行代码的作用? - GPopat

9

我遇到了相同的错误,并且通过输入确切的安装目录使其工作:

import findspark
# Use this
findspark.init("C:\Users\PolestarEmployee\spark-1.6.3-bin-hadoop2.6")
# Test
from pyspark import SparkContext, SparkConf

基本上,它是Spark被提取的目录。将来只要看到spark_home,就输入相同的安装目录。我还尝试使用toree创建内核,但不知何故失败了。内核将是一种更清洁的解决方案。

对我来说,我必须使用“/”而不是“\”才能使其工作,即findspark.init("C:/Users/.....")。不确定为什么... - Molly Zhou

3

您需要更新bash_profile文件中的SPARK_HOME变量。 对于我来说,以下命令有效(在终端中):

export SPARK_HOME="/usr/local/Cellar/apache-spark/2.2.0/libexec/"

完成后,您可以使用以下命令:

import findspark
findspark.init('/usr/local/Cellar/apache-spark/2.2.0/libexec')

从其他解决方案来看,这个解决方案似乎是多余的。你不应该在两个地方都指定路径。 - D. Ror.
我也曾这样想过。然而,在我的环境中,调用findspark.init()时仍需指定路径。 - val_to_many

0
也许这可以帮助:
我发现findspark.init()尝试在.\spark-3.0.1-bin-hadoop2.7\bin\python\lib中查找数据,但是python文件夹在bin文件夹外面。 我只需运行findspark.init('.\spark-3.0.1-bin-hadoop2.7'),不需要'\bin'文件夹。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接