一、目的
根据给出的数据样本,统计出搜索指数最高的男明星和女明星。
二、思路分析
1.编写 Mapper类,将数据集解析为 key=gender,value=name+hotIndex,然后输出。
2.编写 Combiner 类,合并 Mapper 输出结果,然后输出给 Reducer。
3.编写 Partitioner 类,按性别,将结果指定给不同的 Reduce 执行。
4.编写 Reducer 类,分别统计出男、女明星的最高搜索指数。
5.编写 run 方法执行 MapReduce 任务。
三、部分数据
四、编写程序
1.Map函数解析数据集
/*
* *map函数
* key=gender,value=name+hotIndex
*/
public static class Map extends Mapper<Object,Text,Text,Text>
{
protected void map(Object key,Text value,Context context) throws IOException, InterruptedException
{
//value=name+gender+hotIndex
String[] arr = value.toString().split("\t");//使用分隔符\t将数据解析为数组
String gender=arr[1].trim();//性别
String hotIndex = arr[0]+"\t"+arr[2];//姓名和搜索指数
//输出key=gender,value=name+hotIndex
context.write(new Text(gender), new Text(hotIndex));
}
}
2.Combiner函数,对map的输出结果先进行一次合并,减少网络输出
/*
* 定义combiner合并Mapper的输出结果
* */
public static class StartCombiner extends Reducer<Text,Text,Text,