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

Mapreduce pyspark中映射器内的导入错误,mapreduce,pyspark,yarn,networkx,amazon-emr,Mapreduce,Pyspark,Yarn,Networkx,Amazon Emr,我正在处理一个EMR纱线簇,但networkx出现问题。 我试图在映射器中运行networkx包中的一个算法,收到一个错误,说没有模块名“decorator”,并立即失败,错误如下: 文件“/networkx-1.11-py2.7.egg/networkx/utils/init.py”,第2行,在 文件“/networkx-1.11-py2.7.egg/networkx/utils/decorators.py”,第7行,在 导入错误:没有名为decorator的模块 at org.apa

我正在处理一个EMR纱线簇,但networkx出现问题。 我试图在映射器中运行networkx包中的一个算法,收到一个错误,说没有模块名“decorator”,并立即失败,错误如下:

文件“/networkx-1.11-py2.7.egg/networkx/utils/init.py”,第2行,在 文件“/networkx-1.11-py2.7.egg/networkx/utils/decorators.py”,第7行,在 导入错误:没有名为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)
位于org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
位于org.apache.spark.api.python.PythonRunner$$anon$1。(PythonRDD.scala:234)
位于org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
位于org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
在org.apache.spark.rdd.rdd.computeOrReadCheckpoint(rdd.scala:319)
当我在本地模式下运行完全相同的脚本时(不使用集群),它工作得很好

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

  • wget networkx包及其egg到集群
  • 已在群集上安装networkx
  • 使用命令--py files运行我的脚本,路径为egg: spark submit--py文件路径到egg/networkx-1.11-py2.7.egg--主纱线--部署模式群集路径到文件/NX.py
  • 只有在集群模式下运行代码时,问题才存在。似乎出于某种原因,networkx egg无法导入decorator

    我该如何进行?我还需要为装饰师再找一个鸡蛋吗?关于如何在映射器中使用networkx包,还有其他想法吗


    非常感谢。

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

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

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

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

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

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

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

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

    谢谢在我生成“decorator.egg”并将其添加到命令params之后,它工作得非常好。谢谢!在我生成“decorator.egg”并将其添加到命令参数后,它工作得非常好。