2017-06-17 24 views
1

我正在处理一个与networkx有关的EMR YARN群集。 我想运行映射器内的networkx包内的算法之一,并收到错误说没有模块名称“装饰器”,并立即失败,与下面的错误:在pyspark中的映射器内导入错误

文件“./networkx- 1.11-py2.7.egg/networkx/utils/init .py“,第2行,在 文件”./networkx-1.11-py2.7.egg/networkx/utils/decorators.py“,第7行,在 导入错误:没有模块名为装饰

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) 

当我跑步时在本地模式(确切的脚本,它工作正常withou t使用群集)。

我参加了以运行代码的步骤如下:

  1. wget的networkx包及其卵到集群。
  2. 在群集上安装了networkx。
  3. 使用以下命令运行我的脚本--py-files,以及蛋的路径: spark-submit --py-files path-to-egg/networkx-1.11-py2.7.egg --master yarn - 部署模式集群路径到文件/ NX.py

只有当我在集群模式下运行代码时才存在问题。似乎由于某种原因,networkx egg无法导入装饰器。

我该如何继续?我是否还需要为装饰者找到另一个蛋?有关如何在mapper内使用networkx包的其他想法?

非常感谢。

回答

0

它看起来像你需要添加另一个蛋文件,为decorator包。

举例来说,你可以下载压缩包(从上面的链接),并建立自己的蛋:

$ python setup.py bdist_egg 

然后,您可以在--py-files参数,如路径添加到您的鸡蛋

$ spark-submit --py-files /path/to/foo.egg,/path/to/bar.egg 
+0

谢谢!它在我生成“decorator.egg”并将其添加到命令params后完美工作。 – sidodan