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_profileexport 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
ImportError:无法在 IPython 中导入名称“SparkContext”
PySpark 抛出 ImportError,但 Module 确实存在并且运行良好
from pyspark.sql.snappy import SnappyContext - ImportError: No module named snappy