在Python shell中导入pyspark

134 投票
20 回答
220942 浏览
提问于 2025-04-18 04:00

这是一个在其他论坛上有人提问但从未得到回答的问题,所以我想在这里重新问一下,因为我也遇到了同样的问题。(见 http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736

我在我的电脑上正确安装了Spark,并且可以使用./bin/pyspark作为我的Python解释器,顺利运行带有pyspark模块的Python程序,没有任何错误。

但是,当我尝试运行普通的Python命令行时,想要导入pyspark模块时,就出现了这个错误:

from pyspark import SparkContext

错误信息是

"No module named pyspark".

我该怎么解决这个问题呢?我需要设置什么环境变量来告诉Python去找pyspark的头文件、库文件等吗?如果我的Spark安装在/spark/目录下,我需要包含哪些pyspark的路径?或者说,pyspark程序只能在pyspark解释器中运行吗?

20 个回答

25

通过导出SPARK路径和Py4j路径,问题解决了:

export SPARK_HOME=/usr/local/Cellar/apache-spark/1.5.1
export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH
PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH 
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

所以,如果你不想每次打开Python环境都要输入这些命令,可以把它们添加到你的.bashrc文件里。

25

不要用这种方式运行你的py文件:python filename.py,而是应该使用:spark-submit filename.py

来源:https://spark.apache.org/docs/latest/submitting-applications.html

55

如果你看到这样的错误信息:

ImportError: No module named py4j.java_gateway

这意味着你的系统找不到一个叫做py4j.java_gateway的模块。为了修复这个问题,你需要把$SPARK_HOME/python/build这个路径添加到PYTHONPATH中:

export SPARK_HOME=/Users/pzhang/apps/spark-1.1.0-bin-hadoop2.4
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH
119

假设你有以下其中一种情况:

  • 你的系统上已经下载了Spark,并且你设置了一个环境变量 SPARK_HOME 指向它
  • 你已经运行了 pip install pyspark 来安装它

这里有一个简单的方法 (如果你不在乎它是怎么工作的!!!)

使用 findspark

  1. 打开你的Python命令行

    pip install findspark
    
    import findspark
    findspark.init()
    
  2. 导入必要的模块

    from pyspark import SparkContext
    from pyspark import SparkConf
    
  3. 完成了!!!

52

原来,pyspark这个程序会自动加载Python,并且会自动找到正确的库路径。你可以看看 $SPARK_HOME/bin/pyspark 这个文件:

export SPARK_HOME=/some/path/to/apache-spark
# Add the PySpark classes to the Python path:
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH

我在我的.bashrc文件里加了这一行,现在模块都能正确找到啦!

撰写回答