【问题标题】:Import error inside a mapper in pyspark在 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)

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

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

  1. wget networkx 包和它的 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

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

我该如何进行?我是否还需要为装饰者寻找另一个彩蛋?关于如何在映射器中使用 networkx 包的任何其他想法?

非常感谢。

【问题讨论】:

    标签: mapreduce pyspark hadoop-yarn networkx amazon-emr


    【解决方案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”并将其添加到命令参数后,它工作得很好。
    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2020-06-27
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多