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

时间:2014-12-22 21:02:10

标签: python pycharm apache-spark

目标:我正在尝试在我的pycharm IDE中正确解释apache-spark pyspark。

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

ImportError: cannot import name accumulators

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

由于我的代码采用了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)

提前致谢!

11 个答案:

答案 0 :(得分:7)

它位于变量PYTHONPATH周围,它指定python模块搜索路径。

因为pyspark运行良好,你可以参考shell脚本pyspark,看看PYTHONPATH设置如下所示。

PYTHONPATH = / usr / lib中/火花/蟒/ LIB / py4j-0.8.2.1-src.zip:/ usr / lib中/火花/蟒

我的环境是Cloudera Qickstart VM 5.3。

希望这有帮助。

答案 1 :(得分:4)

这对我来说就像一个循环依赖性错误。

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

答案 2 :(得分:2)

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

sudo pip install py4j

没有必要设置bashrc。

答案 3 :(得分:1)

我使用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

现在按预期运作。

答案 4 :(得分:1)

我也遇到了这个问题。为了解决这个问题,我在r中注释了导致错误的文件中的第28行:

~/spark/spark/python/pyspark/context.py

由于累加器导入似乎包含在以下行(29)中,因此似乎不是问题。 Spark现在正常运行(# from pyspark import accumulators from pyspark.accumulators import Accumulator 之后)。

答案 5 :(得分:1)

在Pycharm中,在运行上面的脚本之前,请确保已解压缩py4j * .zip文件。并在脚本sys.path.append中添加它的引用(" spark * / python / lib&#34的路径;)

它对我有用。

答案 6 :(得分:1)

this.props.navigator.setButtons({
  rightButtons: [
    { title: 'Reset', id: 'resetButton' },
    { title: 'Submit', id: 'submitButton' }
  ]
});

答案 7 :(得分:1)

首先,设置环境var

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"

确保使用自己的版本名称

然后重启!验证您的设置非常重要。

答案 8 :(得分:0)

我能够在Windows上找到解决方法,但不能确定它的根本原因。

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

答案 9 :(得分:0)

如果你刚刚升级到新的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" for spark 2.0.0

答案 10 :(得分:0)

唯一能解决的问题是,去火花的基础文件夹。然后去accumulators.py

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

你很高兴去!