findspark.init()IndexError:列表索引超出范围:Google Colab上的PySpark

时间:2019-04-18 14:43:59

标签: pyspark google-colaboratory

我正在尝试在Colab上安装PySpark。

!apt-get install openjdk-8-jdk-headless -qq > /dev/null
!wget -q https://www-us.apache.org/dist/spark/spark-2.4.1/spark-2.4.1-bin-hadoop2.7.tgz
!tar xf spark-2.4.1-bin-hadoop2.7.tgz
!pip install -q findspark

安装完上述内容后,我将环境设置为:

import os
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
os.environ["SPARK_HOME"] = "/content/spark-2.2.1-bin-hadoop2.7"

在那之后,我尝试如下初始化pyspark并最终出错。

import findspark
findspark.init()

错误:

IndexError                                Traceback (most recent call last)

<ipython-input-24-4e91d34768ac> in <module>()
      1 import findspark
----> 2 findspark.init()

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

IndexError: list index out of range

2 个答案:

答案 0 :(得分:1)

确保您的Java和Spark路径(包括版本)正确:

os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
os.environ["SPARK_HOME"] = "/content/spark-2.4.4-bin-hadoop2.7"

然后尝试通过打印路径来检查路径是否正确

print(os.listdir('./sample_data'))

如果您获得了示例文件列表,则代码将初始化而不会出现“索引超出范围”错误

答案 1 :(得分:0)

您可以尝试设置

os.environ["SPARK_HOME"] = "/content/spark-2.2.1-bin-hadoop2.7"

与上述安装版本相同的Spark版本?您的情况将是2.4.1而不是2.2.1。

os.environ["SPARK_HOME"] = "/content/spark-2.4.1-bin-hadoop2.7"