大数据全系列 教程
1869个小节阅读:465.4k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
xxxxxxxxxx
package com.itbaizhan;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
import java.util.*;
public class FOFReducer2 extends Reducer<Text,Text,Text,Text> {
private Text outValue = new Text();
private Map<String,Integer> friends = new HashMap<String,Integer>();
private List<Map.Entry<String,Integer>> list = new ArrayList<>();
@Override
protected void reduce(Text key, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException {
//清空集合中的数据避免之前数据的干扰
friends.clear();
list.clear();
/**hadoop cat,2
* hadoop hello,3
* hadoop mr,1
*/
//遍历values,将数据保存着到friends中
/**friends(HashMap):
* cat 2
* hello 3
* mr 1
*/
for(Text value:values){
String[] nameNum = value.toString().split(",");
friends.put(nameNum[0],Integer.parseInt(nameNum[1]));
}
/**list(ArrayList):
* hello 3
* cat 2
* mr 1
*/
//实现方式一:
/*for(Map.Entry<String,Integer> entry:friends.entrySet()){
int friendNum = entry.getValue();
boolean flag = false;
//遍历list,添加到对应的位置
for(int i = 0;i<list.size();i++){
if(friendNum>list.get(i).getValue()){
list.add(i,entry);
flag = true;
break;
}
}
//如果比list中已有数据的间接好友数量小,则添加到最后的位置
if(!flag){
list.add(entry);
}
}*/
//实现方式二:
//直接添加到list中
for(Map.Entry<String,Integer> entry:friends.entrySet()){
list.add(entry);
}
//然后再对list中的数据进行排序
list.sort(new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getValue()-o2.getValue();
}
});
//获取推荐的间接好友:top2
String result = "";
for(int i = 0;i<(list.size()>=2?2:list.size());i++){
result += list.get(i).getKey()+",";
}
//去掉最后一个逗号
result = result.substring(0,result.length()-1);
//将result封装到outValue中
outValue.set(result);
//输出
context.write(key,outValue);
}
}