【问题标题】:pyspark ImportError: cannot import name accumulatorspyspark ImportError:无法导入名称累加器
【发布时间】:2014-12-22 21:02:10
【问题描述】:

目标:我试图让 apache-spark pyspark 在我的 pycharm IDE 中得到适当的解释。

问题:我目前收到以下错误:

ImportError: cannot import name accumulators

我正在关注以下博客以帮助我完成整个过程。 http://renien.github.io/blog/accessing-pyspark-pycharm/

由于我的代码采用了 except 路径,我个人摆脱了 try: except: 只是为了看看确切的错误是什么。

在此之前我收到以下错误:

ImportError: No module named py4j.java_gateway

只需在 bash 中键入“$sudo pip install py4j”即可解决此问题。

我的代码目前看起来如下块:

import os
import sys

# Path for spark source folder
os.environ['SPARK_HOME']="[MY_HOME_DIR]/spark-1.2.0"

# Append pyspark to Python Path
sys.path.append("[MY_HOME_DIR]/spark-1.2.0/python/")

try:
    from pyspark import SparkContext
    print ("Successfully imported Spark Modules")

except ImportError as e:
    print ("Can not import Spark Modules", e)
    sys.exit(1)

我的问题:
1.这个错误的根源是什么?原因是什么? 2. 我该如何解决这个问题,以便我可以在我的 pycharm 编辑器中运行 pyspark。

注意:我在 pycharm 中使用的当前解释器是 Python 2.7.8 (~/anaconda/bin/python)

提前谢谢!

不要

【问题讨论】:

    标签: python pycharm apache-spark


    【解决方案1】:

    它围绕着变量PYTHONPATH,它指定了python模块的搜索路径。

    由于大部分pyspark运行良好,你可以参考shell脚本pyspark,看到PYTHONPATH设置如下。

    PYTHONPATH=/usr/lib/spark/python/lib/py4j-0.8.2.1-src.zip:/usr/lib/spark/python。

    我的环境是 Cloudera Qickstart VM 5.3。

    希望这会有所帮助。

    【讨论】:

    • 在我的 Mac 上,我将以下内容添加到我的 .bash_profile export PYTHONPATH=/opt/spark/python
    【解决方案2】:

    在我看来,这就像一个循环依赖错误。

    MY_HOME_DIR]/spark-1.2.0/python/pyspark/context.py 中删除或注释掉该行

    from pyspark import accumulators.

    从顶部开始大约有 6 行代码。

    我在这里提交了 Spark 项目的问题:

    https://issues.apache.org/jira/browse/SPARK-4974

    【讨论】:

    • 你好。感谢您的回复。当我注释掉并没有解决问题时。
    • 我认为这可能与Java的版本有关。我拥有的 Java 版本是 1.8,需要降级到 1.6.X 才能正常工作。我只是不愿意这样做。见stackoverflow.com/questions/23353477/trouble-installing-pyspark
    • @matt2000,当我尝试使用示例程序(例如 wordcount.py)时,评论累加器会导致运行时错误
    【解决方案3】:

    我遇到了同样的错误。 我刚刚安装了py4j。

    sudo pip install py4j
    

    无需设置 bashrc。

    【讨论】:

    • 重启 jupyter 后,这在 Windows 10 上对我有用
    【解决方案4】:

    首先,设置你的环境变量

    export SPARK_HOME=/home/.../Spark/spark-2.0.1-bin-hadoop2.7
    export PYTHONPATH=$SPARK_HOME/python/:$SPARK_HOME/python/lib/py4j-0.10.3-src.zip:$PYTHONPATH
    PATH="$PATH:$JAVA_HOME/bin:$SPARK_HOME/bin:$PYTHONPATH"
    

    确保您使用自己的版本名称

    然后,重新启动!验证您的设置很重要。

    【讨论】:

      【解决方案5】:

      我在使用 cdh 5.3 时遇到了同样的问题

      最终,这实际上很容易解决。我注意到脚本 /usr/lib/spark/bin/pyspark 有为 ipython 定义的变量

      我将 anaconda 安装到 /opt/anaconda

      export PATH=/opt/anaconda/bin:$PATH
      #note that the default port 8888 is already in use so I used a different port
      export IPYTHON_OPTS="notebook --notebook-dir=/home/cloudera/ipython-notebook --pylab inline --ip=* --port=9999"
      

      最后……

      执行

      /usr/bin/pyspark
      

      现在按预期运行。

      【讨论】:

        【解决方案6】:

        我也遇到了这个问题。为了解决这个问题,我注释掉了 ~/spark/spark/python/pyspark/context.py 中的第 28 行,这是导致错误的文件:

        # from pyspark import accumulators
        from pyspark.accumulators import Accumulator
        

        由于以下行 (29) 似乎涵盖了累加器导入,因此似乎没有问题。 Spark 现在运行良好(在pip install py4j 之后)。

        【讨论】:

          【解决方案7】:

          在 Pycharm 中,在运行上述脚本之前,请确保您已经解压缩了 py4j*.zip 文件。并将其引用添加到脚本 sys.path.append("path to spark*/python/lib")

          它对我有用。

          【讨论】:

            【解决方案8】:
            To get rid of **ImportError: No module named py4j.java_gateway** you need to add following lines 
            
            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 上找到解决此问题的方法,但不确定其根本原因。

              如果您打开 accumulators.py,您会看到首先有一个标题注释,然后是帮助文本,然后是导入语句。将一个或多个 import 语句移到注释块之后和帮助文本之前。这适用于我的系统,我能够毫无问题地导入 pyspark。

              【讨论】:

                【解决方案10】:

                如果您刚刚升级到新的 spark 版本,请确保新版本的 py4j 在您的 PATH 中,因为每个新的 spark 版本都带有新的 py4j 版本。

                就我而言,它是:“$SPARK_HOME/python/lib/py4j-0.10.3-src.zip”用于 spark 2.0.1 而不是旧的“$SPARK_HOME/python/lib/py4j-0.10.1- src.zip" 用于 spark 2.0.0

                【讨论】:

                  【解决方案11】:

                  唯一对我有用的是,转到 spark 的基本文件夹。然后转到 accumulators.py

                  一开始,使用了错误的多行命令。删除一切。

                  你可以走了!

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-03-31
                    • 2014-10-10
                    • 2014-09-20
                    • 2014-08-28
                    相关资源
                    最近更新 更多