在Python shell中导入pyspark
这是一个在其他论坛上有人提问但从未得到回答的问题,所以我想在这里重新问一下,因为我也遇到了同样的问题。(见 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 个回答
通过导出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
文件里。
不要用这种方式运行你的py文件:python filename.py
,而是应该使用:spark-submit filename.py
来源:https://spark.apache.org/docs/latest/submitting-applications.html
如果你看到这样的错误信息:
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
假设你有以下其中一种情况:
- 你的系统上已经下载了Spark,并且你设置了一个环境变量
SPARK_HOME
指向它 - 你已经运行了
pip install pyspark
来安装它
这里有一个简单的方法 (如果你不在乎它是怎么工作的!!!)
使用 findspark
打开你的Python命令行
pip install findspark import findspark findspark.init()
导入必要的模块
from pyspark import SparkContext from pyspark import SparkConf
完成了!!!
原来,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文件里加了这一行,现在模块都能正确找到啦!