我正在开发一个与networkx有问题的EMR YARN群集。 我试图在mapper中运行networkx包中的一个算法,并收到一个错误,说没有模块名称“decorator”,并立即失败,出现以下错误:
文件“./networkx-1.11-py2.7.egg/networkx/utils/init.py”,第2行,in 文件“./networkx-1.11-py2.7.egg/networkx/utils/decorators.py”,第7行,in ImportError:没有名为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)
当我在本地模式下运行确切的脚本(不使用群集)时,它工作正常。
我为运行代码而采取的步骤如下:
仅当我在群集模式下运行代码时才会出现此问题。似乎由于某种原因,networkx egg无法导入装饰器。
我该怎么办?我是否还需要为装饰师找到另一个鸡蛋?关于如何在mapper中使用networkx包的任何其他想法?
非常感谢。
答案 0 :(得分:0)
看起来您需要为decorator
包添加另一个egg文件。
例如,您可以下载tarball(来自上面的链接)并构建自己的鸡蛋:
$ python setup.py bdist_egg
然后,您可以在--py-files
参数中添加鸡蛋的路径,例如
$ spark-submit --py-files /path/to/foo.egg,/path/to/bar.egg