小编Rob*_*sky的帖子

Hadoop/MapReduce - 优化"前N个"字数MapReduce作业

我正在研究类似于规范MapReduce示例的东西 - 单词计数,但有一个转折,我希望只获得前N个结果.

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

"这是对测试数据的测试,也是测试数据的好方法"

标准MapReduce字数统计作业的结果集将是:

测试:3,a:2,这个:2,是:1等.

但如果我想要得到我的整个数据集中使用的前3个字?

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

我的想法是,如果这个样本足够大,并且数据随机且在HDFS中分布良好,那么每个Mapper都不需要将所有字数发送到Reducers,而只需要一些最重要的数据.所以如果一个mapper有这个:

a:8234,:5422,男:4352,...... 更多的话 ......,难得一见:1,怪词:1,等等

那么我想要做的只是将每个Mapper中的前100个左右的单词发送到Reducer阶段 - 因为"罕见"几乎没有机会在完成所有内容时突然进入前三名.这似乎可以节省带宽和减速器处理时间.

这可以在Combiner阶段完成吗?通常在洗牌阶段之前进行这种优化吗?

algorithm hadoop mapreduce

9
推荐指数
2
解决办法
8379
查看次数

标签 统计

algorithm ×1

hadoop ×1

mapreduce ×1