Mapreduce算法
输入key value key是用户 value是用户的好友列表 ,构造新的key 是用户和其中一个好友,value是 用户的其余的好友列表,在归约器中求相同key 的value的交集
map(key, value){
reducevalue=(
foreach firend in reducevalue{
reducekey=buidSortedKey(persion,firend);
emit(reducekey, reducevalue);}
}
reduce(key,value){
outputkey=key;
outputvalue=interection(list1,list2,listm);
emit(outputkey,outputvalue);
}
spark实现方案
public class FindCommonFriends{
public static void main(String[] args) throws Exception{
//确认输入参数
//创建sparkcontext上下文对象
JavaSparkContext ctx = new JavaSparkContext();
//从text创建RDD
JavaRDD
//建立键值对,key为用户和客户对,value为客户列表
JavaPairRDD
new PairFlatMap Function
public Iterable
String[] tokens=s.split(",");
long person = Long.parselong(tokens[0]);
String friendAsString= tokens[1];
String[] friendsAsTokenized= friendAsString.split(" ");
if (friendsAsTokenized.length ==1){
Tuple2
return Arrays.asList(
new Tuple2
};
List
for (String f : friendAsTokenized){
friends.add(Long.parselong(f));
}
List
new ArrayList
for(Long f:friends){
result.add(new Tuple2
return result;
}
})
//规约键值对
JavaPairRDD
//从pair的客户列表中创建交集
JavaPairRDD
new Function2<
public Iterable
Set
Set
for (Long item :b){
if (x.contains(item)){
intersection.add(item);}
}
}
return intersection;
}
}
//
//
//
//
}
}