无法在Mrjob中导入模块

时间:2014-10-19 10:09:09

标签: python mrjob

我尝试使用mrjob更改wordcount示例。我的结构项目是:

├── input_text.txt
├── store_xml_dir
│   ├── xml_file.xml
│   └── xml_parse.py
└── wordcount.py

和wordcount.py的内容是:

import os
import sys
cwdir = os.path.dirname(__file__)
sys.path.append(cwdir)
sys.path.append(os.path.join(cwdir, "store_xml_dir"))

import xml_parse
# print dir(xml_parse) <- it works here if i'd comment the rest code

from mrjob.job import MRJob


class MRWordFrequencyCount(MRJob):

    def mapper(self, _, line):
        getxml = xml_parse.GetXML()
        print '>>>', getxml.get_strings()

        yield "chars", len(line)
        yield "words", len(line.split())
        yield "lines", 1

    def reducer(self, key, values):
        yield key, sum(values)

if __name__ == '__main__':
    MRWordFrequencyCount.run()

当我跑步时,我遇到了错误:ImportError: No module named xml_parse。为什么python在这种情况下无法导入xml_parse

2 个答案:

答案 0 :(得分:0)

mrjob 为您导出 none mapreduce 代码,您需要自己导出。但是您需要明确告诉它在配置中这样做。 (看看他们的documentation

您可以通过添加以下配置参数来运行代码:

--python-archive=store_xml_dir

答案 1 :(得分:0)

我发现在成员函数中导入模块可以解决这个问题。

def mapper(self, _, line):
    import xml_parse
    ...