有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hadoop/MapReduce优化“Top N”字数?

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

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

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

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

我仍然可以运行完全相同的标准MapReduce字数计算作业,然后在准备好并对每个单词进行计数后,只需获取前3个结果,但这似乎有点低效,因为在洗牌阶段需要移动大量数据

我的想法是,如果这个样本足够大,并且数据在HDF中是随机且均匀分布的,那么每个映射器不需要将其所有字数都发送给还原器,而是只发送一些顶级数据。因此,如果一个地图绘制者有这样的问题:

a:8234,电话:5422,男:4352。。。。。。还有很多词,稀奇古怪的词1等等。 然后我想做的是,只把每个映射器中的前100个左右的单词发送到Reducer阶段,因为当所有的话都说了和做了之后,“rareword”突然进入前3名的可能性很小。这似乎可以节省带宽和处理时间

ps:我想知道如何在组合器阶段做到这一点?谢谢


共 (0) 个答案