pyspark ImportError:无法导入名称累加器

Posted

技术标签:

【中文标题】pyspark ImportError:无法导入名称累加器【英文标题】:pyspark ImportError: cannot import name accumulators 【发布时间】: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)

提前谢谢!

不要

【问题讨论】:

【参考方案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 才能正常工作。我只是不愿意这样做。见***.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

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

你可以走了!

【讨论】:

以上是关于pyspark ImportError:无法导入名称累加器的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark (spark 1.6.x) ImportError: 无法导入名称 Py4JJavaError

无法导入 pyspark 统计模块

PySpark worker在安装时无法导入包

ImportError:无法在 IPython 中导入名称“SparkContext”

PySpark 抛出 ImportError,但 Module 确实存在并且运行良好

from pyspark.sql.snappy import SnappyContext - ImportError: No module named snappy