在python shell中导入pyspark

这是别人在另一个论坛上的问题的副本,从来没有回答,所以我想我会在这里再问一次,因为我有同样的问题。 (见http://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 )

我已经正确地在我的机器上安装了Spark,并且能够在使用./bin/pyspark作为我的python解释器时,运行带有pyspark模块的python程序而不会出错。

但是,当我尝试运行常规Python shell时,当我尝试导入pyspark模块时,出现此错误:

from pyspark import SparkContext 

它说

 "No module named pyspark". 

我该如何解决这个问题? 是否有一个环境variables,我需要设置指向Python的pyspark标题/库/等? 如果我的火花装置是/ spark /,我需要包括哪些pysparkpath? 或者pyspark程序只能从pyspark解释器运行?

这是一个简单的方法(如果你不打扰它如何工作!!!)

使用findspark

  1. 转到你的Python shell

    pip install findspark import findspark findspark.init()

  2. 导入必要的模块

    from pyspark import SparkContext from pyspark import SparkConf

  3. 完成!

如果它打印这样的错误:

ImportError:没有名为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 

原来,pyspark bin是LOADING python,并自动加载正确的库path。 看看$ SPARK_HOME / bin / pyspark:

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

我将这行添加到我的.bashrc文件中,现在可以正确find模块了!

通过导出SPARKpath和Py4jpath,它开始工作:

 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 shell的时候input这些,你可能想把它添加到你的.bashrc文件中

在Mac上,我使用Homebrew来安装Spark(公式“apache-spark”)。 然后,我这样设置PYTHONPATH,以便Python导入工作:

 export SPARK_HOME=/usr/local/Cellar/apache-spark/1.2.0 export PYTHONPATH=$SPARK_HOME/libexec/python:$SPARK_HOME/libexec/python/build:$PYTHONPATH 

将“1.2.0”replace为Mac上的实际apache-spark版本。

不要运行你的py文件: python filename.py改为使用: spark-submit filename.py

在Windows 10下面为我工作。 我使用设置 > 编辑您的帐户的环境variables添加了以下环境variables:

 SPARK_HOME=C:\Programming\spark-2.0.1-bin-hadoop2.7 PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH% 

(将“C:\ Programming \ …”更改为已安装spark的文件夹)

为了摆脱ImportError: No module named py4j.java_gateway ,您需要添加以下几行:

 import os import sys os.environ['SPARK_HOME'] = "D:\python\spark-1.4.1-bin-hadoop2.4" sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python") sys.path.append("D:\python\spark-1.4.1-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip") try: from pyspark import SparkContext from pyspark import SparkConf print ("success") except ImportError as e: print ("error importing spark modules", e) sys.exit(1) 

我正在从cloudera yum软件包安装的CentOS VM上运行一个Spark集群。

必须设置以下variables来运行pyspark。

 export SPARK_HOME=/usr/lib/spark; export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH 
 export PYSPARK_PYTHON=/home/user/anaconda3/bin/python export PYSPARK_DRIVER_PYTHON=jupyter export PYSPARK_DRIVER_PYTHON_OPTS='notebook' 

这就是我为Spark使用Anaconda发行版所做的。 这是Spark版本独立。 您可以将第一行更改为用户的python bin。 另外,从Spark 2.2.0开始,PySpark可以作为PyPi的独立软件包使用,但是我还没有对其进行testing。

我得到这个错误,因为我试图提交的Python脚本被称为pyspark.py( facepalm )。 解决办法是按照上面的build议设置我的PYTHONPATH,然后将脚本重命名为pyspark_test.py,并清理基于脚本原始名称创build的pyspark.pyc,并清除此错误。

我有这个相同的问题,并会在上面提出的解决scheme中添加一件事情。 当在Mac OS X上使用Homebrew安装Spark时,需要更正py4jpath地址,以便在path中包含libexec(记住要将py4j版本更改为您所拥有的版本)。

 PYTHONPATH=$SPARK_HOME/libexec/python/lib/py4j-0.9-src.zip:$PYTHONPATH 

对于Linux用户,以下是在PYTHONPATH中包含pyspark libaray的正确(和非硬编码)方法。 两个PATH部分都是必需的:

  1. pyspark Python模块本身的path,
  2. pyspark模块在导入时依赖的压缩库的path

注意下面的压缩库版本是dynamic确定的,所以我们不对它进行硬编码。

 export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH} 

在DSE(DataStax Cassandra&Spark)的情况下,需要将以下位置添加到PYTHONPATH

 export PYTHONPATH=/usr/share/dse/resources/spark/python:$PYTHONPATH 

然后使用dse pyspark获取path中的模块。

 dse pyspark