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

时间:2017-02-14 10:20:30

标签: python pyspark py4j

在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 个答案:

答案 0 :(得分:5)

这很可能是由于您的系统上未正确设置findspark环境变量。或者,您可以在初始化import findspark findspark.init('/path/to/spark/home') 时指定它,如下所示:

 for(ctr = 0; ctr < 3; ctr++)
    {
        printf("What is the name of the book #%d?\n", (ctr+1));
        gets(books[ctr].title);
        puts("Who is the author? ");
        gets(books[ctr].author);
        puts("How much did the book cost? ");
        scanf("%lf$", &books[ctr].price); //Changed
        puts("How many pages in the book? ");
        scanf(" %d", &books[ctr].pages);
        getchar();  // Clears last newline for the next loop
    }

之后,它应该全部工作!

答案 1 :(得分:4)

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

spark_home
  

基本上,它是提取spark的目录。将来,您会看到((Activity)context).finish(); 输入相同的安装目录。   我也尝试使用toree来创建一个核心,但它以某种方式失败了。核心将是一个更清洁的解决方案。

答案 2 :(得分:1)

您需要更新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')

答案 3 :(得分: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'文件夹