在 pyspark 的映射器中导入错误
Posted
技术标签:
【中文标题】在 pyspark 的映射器中导入错误【英文标题】:Import error inside a mapper in pyspark 【发布时间】:2017-06-17 09:44:50 【问题描述】:我正在开发一个 EMR YARN 集群,但遇到了 networkx 问题。 我正在尝试在映射器内的 networkx 包中运行其中一种算法,并收到一条错误消息,指出没有模块名称“装饰器”,并立即失败,并出现以下错误:
文件“./networkx-1.11-py2.7.egg/networkx/utils/init.py”,第 2 行,在 文件“./networkx-1.11-py2.7.egg/networkx/utils/decorators.py”,第 7 行,在 ImportError: No module named decorator
at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:234)
at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
当我在本地模式下运行确切的脚本时它工作正常(不使用集群)。
我为运行代码所采取的步骤如下:
-
wget networkx 包和它的 egg 到集群。
在集群上安装了 networkx。
使用命令 --py-files 运行我的脚本,并带有 egg 的路径:
spark-submit --py-files path-to-egg/networkx-1.11-py2.7.egg --master yarn --deployed-mode cluster path-to-file/NX.py
仅当我在集群模式下运行代码时才存在此问题。似乎由于某种原因,networkx egg 无法导入装饰器。
我该如何进行?我是否还需要为装饰者寻找另一个彩蛋?关于如何在映射器中使用 networkx 包的任何其他想法?
非常感谢。
【问题讨论】:
【参考方案1】:您似乎需要为 decorator
包添加另一个 egg 文件。
例如,您可以下载 tarball(从上面的链接)并构建自己的 egg:
$ python setup.py bdist_egg
然后,您可以在--py-files
参数中添加蛋的路径,例如
$ spark-submit --py-files /path/to/foo.egg,/path/to/bar.egg
【讨论】:
谢谢!在我生成“decorator.egg”并将其添加到命令参数后,它工作得很好。以上是关于在 pyspark 的映射器中导入错误的主要内容,如果未能解决你的问题,请参考以下文章