Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop/MapReduce-优化&x201C;顶部N”;字数?_Java_Hadoop - Fatal编程技术网

Java Hadoop/MapReduce-优化&x201C;顶部N”;字数?

Java Hadoop/MapReduce-优化&x201C;顶部N”;字数?,java,hadoop,Java,Hadoop,我正在研究一些类似于规范化MapReduce示例的东西——单词计数,但有一个转折点,我只希望得到前N个结果 假设我在HDFS中有一组非常大的文本数据。有很多示例展示了如何构建Hadoop MapReduce作业,该作业将为文本中的每个单词提供字数。例如,如果我的语料库是: “这是对测试数据的测试,也是一个很好的测试” 标准MapReduce字数计算作业的结果集为: 测试:3,a:2,this:2,is:1,等等。。 但是,如果我只想得到在我的整个数据集中使用的前三个单词,那会怎样呢 我仍然可以运

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

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

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

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

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

我的想法是,如果这个样本足够大,并且数据在HDFS中随机分布良好,那么每个映射器不需要将其所有字数发送到还原器,而只需要发送一些顶级数据。因此,如果一个映射器具有以下特性:

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


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

谁能帮我谁能帮我