我有一个文件集合,每个文件包含作者的姓名和他使用的单词。现在我正在尝试编写一个map-reduce代码来计算每个作者的前N个单词。棘手的部分是文件可能包含多个作者。那么我的map-reduce框架应该如何设计呢?伪代码加上一点解释就足够了。由于
在一个MR作业中,通过创建作者+单词和值计数的复杂键来计数每个作者使用的单词。
第二个MR作业将读取这些对(author+word,count)并将它们映射到(author+count,word+count)。编写一个比较器,先按作者,然后按计数(从大到小)对这些键排序;编写一个grouper,将具有相同作者的两个键视为在同一个reduce组中,而不管它们的计数如何。您可能需要一个分区器来确保一个作者的所有pair都到同一个分区。然后将为每个作者调用一次reducer,值(word+count)将首先由计数最大的可迭代对象提供。在reducer中只写入author, word和来自Iterable的前N条记录的计数。