我尝试使用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
?
答案 0 :(得分:0)
mrjob 不为您导出 none mapreduce 代码,您需要自己导出。但是您需要明确告诉它在配置中这样做。 (看看他们的documentation)
您可以通过添加以下配置参数来运行代码:
--python-archive=store_xml_dir
答案 1 :(得分:0)
我发现在成员函数中导入模块可以解决这个问题。
def mapper(self, _, line):
import xml_parse
...