MapReduce之Top10
模式描述
Top10顾名思义不管输入数据的大小是多少,都以精准的输出按照规则的前10个结果,在普通的过滤模式中,输出数据的数量有输入数据决定
目的
无论数据集的大小如何,根据数据集的排序方案,得到一个相对较小的topK记录
适用场景
- 异类分析
- 选取感兴趣的数据
- 引人注目的指示版面
- 微博热搜
性能分析
Top10模式的性能通常是非常好的,不过需要注意的是,不管这个模式需要处理多少个记录数,只能使用一个reduce,如果Top值太大的话,毕竟reducer阶段只在一个机器上运行,会使得处理效率能变得更加低效
问题描述
在用户数据中查找声望最高的前十个用户
样例输入
创建数据集的代码如下:
生成的数据集表示一个
import java.io.*;
import java.util.Random;
public class create {
public static void main(String[] args) throws IOException{
String path="input/file.txt";
File file=new File(path);
if(!file.exists()){
file.getParentFile().mkdirs();
}
file.createNewFile();
FileWriter fw=new FileWriter(file,true);
BufferedWriter bw=new BufferedWriter(fw);
for(int i=0;i<5000;i++){
int id=(int)(Math.random()*1000+1000);
bw.write("Username = "+i+" Reputation = "+(int)(Math.random()*1000+1000)+"\n");
}
bw.flush();
bw.close();
fw.close();
}
}
运行结果如下
五千条数据