我正在尝试更好地理解 mrjob 的示例
from mrjob.job import MRJob
class MRWordFrequencyCount(MRJob):
def mapper(self, _, line):
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()
我运行它
$ python word_count.py my_file.txt
它按预期工作,但我不明白它是如何自动知道它将读取一个文本文件并按每一行分割的。而且我也不确定它的_
作用。
据我了解,mapper()
为每一行生成三个键/值对是否正确?如果我想处理文件夹中的每个文件怎么办?
并且reducer()
自动知道如何添加每个键的值?
如果我想通过 map reduce 运行单元测试,mapper 和 reducer 会是什么样子?甚至有必要吗?