【问题标题】:importing pyspark in python shell在 python shell 中导入 pyspark
【发布时间】:2014-06-09 00:12:21
【问题描述】:

这是别人在另一个论坛上的问题的副本,从未得到回答,所以我想我会在这里重新提问,因为我有同样的问题。 (见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 程序?

【问题讨论】:

标签: python apache-spark pyspark


【解决方案1】:

假设以下之一:

  • Spark 已下载到您的系统上,并且您有一个环境变量 SPARK_HOME 指向它
  • 你跑了pip install pyspark

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

使用findspark

  1. 转到你的 python shell

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

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

【讨论】:

  • 其他解决方案对我不起作用。我现在在我的程序中使用 findspark。似乎是解决问题的一个不错的解决方法。
  • 我宁愿不需要这样做 .. 但是 hey .. 鉴于 没有其他工作 ..我会接受的。
【解决方案2】:

如果打印这样的错误:

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

【讨论】:

【解决方案3】:

原来 pyspark bin 正在加载 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 文件中,现在可以正确找到模块!

【讨论】:

  • 除了这一步,我还需要添加:export SPARK_HOME=~/dev/spark-1.1.0,去图。您的文件夹名称可能会有所不同。
【解决方案4】:

通过导出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 文件中

【讨论】:

  • 我在 Apache Spark 安装中找不到 libexec 目录,知道吗?
  • @AlbertoBonsanto 对不起。我没有遇到过这个问题。所以,不知道:(
  • 是的,他们在 spark 1.5.2 中取出了 libexec 文件夹
  • @bluerubez 似乎存在于 spark 1.6.2 中...另外,不确定 libexec/python/build 目录的用途,但 spark 1.6.2 没有该目录
【解决方案5】:

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

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

【讨论】:

  • 有人可以详细说明为什么不这样做吗?我一直在研究这个问题,但到目前为止还没有找到任何可以解释为什么会这样的问题。
  • @Mint 其他答案说明了原因;默认情况下,pyspark 包不包含在 $PYTHONPATH 中,因此 import pyspark 将在命令行或执行的脚本中失败。你必须要么。按预期通过 spark-submit 运行 pyspark 或 b.将 $SPARK_HOME/python 添加到 $PYTHONPATH。
  • 还有一点是spark-submit是一个shell脚本,它可以帮助你在使用spark之前正确配置系统环境,如果你只是做python main.py你需要正确配置系统环境e.g. PYTHONPATH,SPARK_HOME
【解决方案6】:

在 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”替换为您 Mac 上实际的 apache-spark 版本。

【讨论】:

    【解决方案7】:

    对于 pyspark 中的 Spark 执行,需要两个组件一起工作:

    • pysparkpython包
    • JVM 中的 Spark 实例

    当使用 spark-submit 或 pyspark 启动东西时,这些脚本会同时处理这两个问题,即它们设置你的 PYTHONPATH、PATH 等,以便你的脚本可以找到 pyspark,它们也会启动 spark 实例,根据配置到你的参数,例如--master X

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

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

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

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

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

        (把“C:\Programming\...”改成你安装spark的文件夹)

        【讨论】:

          【解决方案10】:

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

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

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

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

          【讨论】:

            【解决方案11】:

            我在 CentOS VM 上运行一个 spark 集群,它是从 cloudera yum 包安装的。

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

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

            【讨论】:

              【解决方案12】:
              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 上的独立包使用 但我还没有测试它。

              【讨论】:

                【解决方案13】:

                您可以使用pip 在python 中获取pyspark path(如果您使用PIP 安装了pyspark),如下所示

                pip show pyspark
                

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

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

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

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

                    dse pyspark
                    

                    【讨论】:

                      【解决方案16】:

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

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

                      【讨论】:

                      • 注意 - 我尝试解压缩并仅使用 py4j 文件夹,但没有用。使用 zip 文件...
                      【解决方案17】:

                      我遇到了同样的问题。

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

                      安装了 pyspark

                      pip2.7 安装 pyspark

                      它成功了。

                      【讨论】:

                        【解决方案18】:

                        在我的情况下,它安装在不同的 python dist_package (python 3.5),而我使用的是 python 3.6, 所以下面的帮助:

                        python -m pip install pyspark
                        

                        【讨论】:

                          【解决方案19】:

                          您还可以创建一个以 Alpine 作为操作系统并将 Python 和 Pyspark 作为软件包安装的 Docker 容器。这将把它全部容器化。

                          【讨论】:

                            【解决方案20】:
                            !pip install pyspark
                            

                            在 Jupyter 笔记本或谷歌 colab 中。不要忘记在 colab 笔记本上列出 Restart Runtime

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2013-06-24
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多