Hadoop / MapReduce - 优化“前N个”字数?

时间:2015-07-04 13:16:04

标签: java hadoop

我正在研究类似于规范MapReduce示例的东西 - 字数统计,但我想要只获得前N个结果。

假设我在HDFS中有一大堆文本数据。有很多示例显示如何构建Hadoop MapReduce作业,该作业将为该文本中的每个单词提供单词计数。例如,如果我的语料库是:

“这是对测试数据的测试,也是测试数据的好测试” 标准MapReduce字数统计作业的结果集为:

测试:3,a:2,这个:2,是:1等。 但是,如果我只想获得我的整个数据集中使用的前三个单词呢?

我仍然可以运行完全相同的标准MapReduce字数统计作业,然后只需准备好前三个结果并且每个字都吐出计数,但这似乎有点低效,因为很多在洗牌阶段需要移动数据。

我在想的是,如果这个样本足够大,并且数据随机且在HDFS中分布良好,那么每个Mapper都不需要将所有字数发送给Reducers,而是只有部分顶级数据。因此,如果一个映射器具有此:

a:8234,:5422,男:4352,......更多的话......,稀有:1,怪词:1等 那么我想要做的只是将每个Mapper中的前100个左右的单词发送到Reducer阶段 - 因为“罕见”的几率几乎没有机会在完成所有内容时突然进入前三名。这似乎可以节省带宽和减速器处理时间。

ps:我想知道如何在Combiner阶段完成这项工作?谢谢!

0 个答案:

没有答案