在python shell中导入pyspark


111

这是其他论坛上从未有人回答过的其他人的问题的副本,因此我想在这里重新提问,因为我有同样的问题。(请参阅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".

我怎样才能解决这个问题?我是否需要设置环境变量以将Python指向pyspark标头/库/等?如果我的spark安装是/ spark /,我需要包括哪些pyspark路径?还是只能从pyspark解释器运行pyspark程序?


他们说,更改环境变量“不是超级有效,因为bin / spark-submit会很快覆盖它”。也许您可以从这次交流中学到一些东西
emmagras 2014年

Answers:


97

这是一个简单的方法(如果您不关心它的工作原理!!!)

使用findspark

  1. 转到您的python shell

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

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


其他解决方案对我不起作用。我现在在程序中使用findspark。似乎是解决该问题的一种不错的解决方法。
分析僧侣

我宁愿不需要这样做..但是 ..鉴于没有其他工作 ..我接受。
javadba

51

如果打印出这样的错误:

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

9
如另一个响应stackoverflow.com/questions/26533169/…中所述, 我必须添加以下导出PYTHONPATH = $ SPARK_HOME / python / lib / py4j-0.8.2.1-src.zip:$ PYTHONPATH
meyerson,2015年

46

原来pyspark bin是LOADING python,并且会自动加载正确的库路径。签出$ SPARK_HOME / bin / pyspark:

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

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


1
除了这一步,我还需要添加:export SPARK_HOME=~/dev/spark-1.1.0,去图。您的文件夹名称可能会有所不同。
emmagras 2014年

21

不要将py文件运行为:python filename.py 而是使用:spark-submit filename.py


有人可以解释为什么不这样做吗?我一直在研究这个问题,但到目前为止,还没有找到任何能解释其原因的信息。
薄荷

@Mint其他答案显示原因;pyspark软件包默认情况下不包含在$ PYTHONPATH中,因此import pyspark会在命令行或执行的脚本中失败。您必须要么。按预期通过spark-submit运行pyspark或b。将$ SPARK_HOME / python添加到$ PYTHONPATH。
国王金币

另一点是火花提交是一个shell脚本,它可以帮助您在使用前火花正确配置系统环境中,如果你只是做蟒蛇main.py您需要正确配置系统环境如PYTHONPATH,SPARK_HOME
E.ZY.

21

通过导出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 Shell时都键入这些内容,则可能需要将其添加到.bashrc文件中


1
我在安装中找不到libexec目录Apache Spark,知道吗?
Alberto Bonsanto 2015年

@AlbertoBonsanto抱歉。我还没有遇到这个问题。所以,不知道:(
Dawny33

1
是的,他们在spark 1.5.2中删除了libexec文件夹
bluerubez

1
@bluerubez似乎在spark 1.6.2中存在...另外,不确定libexec/python/build目录的用途,但是spark 1.6.2中没有该目录
OneCricketeer

17

在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

用Mac上的实际apache-spark版本替换“ 1.2.0”。


14

为了在pyspark中执行Spark,需要两个组件一起工作:

  • pyspark python包
  • JVM中的Spark实例

在使用spark-submit或pyspark启动事物时,这些脚本将同时处理这两个脚本,即它们设置了PYTHONPATH,PATH等,以便您的脚本可以找到pyspark,并且它们还启动spark实例,并根据您的参数进行配置,例如--master X

另外,也可以绕过这些脚本,并直接在python解释器中运行spark应用程序python myscript.py。当spark脚本开始变得更加复杂并最终收到自己的args时,这尤其有趣。

  1. 确保pyspark软件包可以被Python解释器找到。如前所述,可以将spark / python目录添加到PYTHONPATH或使用pip install直接安装pyspark。
  2. 从您的脚本(曾经传递给pyspark的脚本)中设置spark实例的参数。
    • 对于通常使用--conf设置的spark配置,它们在SparkSession.builder.config中使用配置对象(或字符串配置)进行定义
    • 对于当前的主要选项(例如--master或--driver-mem),您可以通过写入PYSPARK_SUBMIT_ARGS环境变量来进行设置。为了使事情更干净,更安全,您可以在Python本身中进行设置,并且启动时spark会读取它。
  3. 启动实例,只需要您getOrCreate()从构建器对象调用即可。

因此,您的脚本可以具有以下内容:

from pyspark.sql import SparkSession

if __name__ == "__main__":
    if spark_main_opts:
        # Set main options, e.g. "--master local[4]"
        os.environ['PYSPARK_SUBMIT_ARGS'] = spark_main_opts + " pyspark-shell"

    # Set spark config
    spark = (SparkSession.builder
             .config("spark.checkpoint.compress", True)
             .config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11")
             .getOrCreate())

9

要摆脱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)

7

在Windows 10上,以下内容对我有用。我使用“设置” >“ 编辑您的帐户的环境变量添加了以下环境变量:

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

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


5

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

  1. pyspark Python模块本身的路径,以及
  2. 导入时pyspark模块依赖的压缩库的路径

请注意以下内容,压缩库的版本是动态确定的,因此我们不会对其进行硬编码。

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

4

我正在CentOS VM上运行一个火花集群,该集群是从cloudera yum软件包安装的。

必须设置以下变量才能运行pyspark。

export SPARK_HOME=/usr/lib/spark;
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH

4
export PYSPARK_PYTHON=/home/user/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'

这就是我将Anaconda发行版与Spark结合使用的过程。这是独立于Spark版本的。您可以将第一行更改为用户的python bin。另外,从Spark 2.2.0起,PySpark作为PyPi上的独立程序包提供,但我尚未对其进行测试。


4

您可以使用以下方式获取pyspark pathpython中的in pip(如果您已使用PIP安装了pyspark),如下所示

pip show pyspark

3

我有同样的问题。

还要确保您使用的是正确的python版本,并且要以正确的pip版本进行安装。就我而言:我同时拥有python 2.7和3.x。我已经安装了pyspark与

pip2.7安装pyspark

而且有效。


2

我收到此错误,是因为我尝试提交的python脚本称为pyspark.py(facepalm)。解决方法是按照上述建议设置我的PYTHONPATH,然后将脚本重命名为pyspark_test.py并清理基于我的脚本原始名称创建的pyspark.pyc并清除此错误。


2

对于DSE(DataStax Cassandra和Spark),需要在PYTHONPATH中添加以下位置

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

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

dse pyspark

2

我遇到了同样的问题,将在上面提出的解决方案中添加一件事。在Mac OS X上使用Homebrew安装Spark时,您需要更正py4j路径地址,以在路径中包含libexec(记住将py4j版本更改为您拥有的版本);

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

注意-我尝试将其解压缩并py4j仅使用该文件夹,但没有用。使用zip文件...
El Dude

2

就我而言,它是在另一个python dist_package(python 3.5)上安装的,而我正在使用python 3.6,因此以下内容有所帮助:

python -m pip install pyspark

1

您还可以创建一个以Alpine作为操作系统,并以Python和Pyspark作为软件包的Docker容器。这样就将所有内容打包了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.