在pyspark中的映射器内导入错误

时间:2017-06-17 09:44:50

标签: mapreduce pyspark yarn networkx amazon-emr

我正在开发一个与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)

当我在本地模式下运行确切的脚本(不使用群集)时,它工作正常。

我为运行代码而采取的步骤如下:

  1. wget networkx package及其egg到集群。
  2. 在群集上安装networkx。
  3. 使用命令--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 < / LI>

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

    我该怎么办?我是否还需要为装饰师找到另一个鸡蛋?关于如何在mapper中使用networkx包的任何其他想法?

    非常感谢。

1 个答案:

答案 0 :(得分:0)

看起来您需要为decorator包添加另一个egg文件。

例如,您可以下载tarball(来自上面的链接)并构建自己的鸡蛋:

$ python setup.py bdist_egg

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

$ spark-submit --py-files /path/to/foo.egg,/path/to/bar.egg
相关问题