Mapreduce框架
输入 user1 movie1 rating
mapreduce 1阶段
map(<user>,<movie>,<rating>){
k2=movie;
v2=Tuple2(user, rating);
emit(ke,v2)
}
//key =movie
// values=List<Tuple2<user,rating>>
reduce(key,values){
numberofraters=values.size();
for(Tuple2<user,rating> t2:values){
k3=t2.user;
v3=Tuple3(key,,t2.rating,numberofraters);
emit(k3,v3);
}
}
mapreduce 第二阶段
//key=user
//value=movie,rating,numberofraters
map(key, value){
Sting [] tokens=value.split(",");
movie=tokens[0];
rating=tokens[1];
numberofraters=tokens[2];
Tuple3<String,Integer,Integer> v3=new Tuple3<movie,rating,numberofraters>;
emit(key,v3)
}
//key=user
//values=list(Tuple3(movie,rating,numberofraters))
reduce(key,values){
List(Tuple2(Tuple3<movie1>,<rating1>,<numberofraters1>,Tuple3<movie2>,<rating2>,<numberofraters2>)) list=
generateUniqueCombinations(values);
for(Tuple2(Tuple3<movie1>,<rating1>,<numberofraters1>,Tuple3<movie2>,<rating2>,<numberofraters2>) pair :list){
m1=pair._1;m2=pair._2;
reducekey=Tuple2(m1.movie,m2.movie);
int ratingproduct=m1.rating*m2.rating;
int rating1squared= m1.rating*m1.rating;
int rating2squared=m2.rating*m2.rating;
reducevalue=Tupl7(m1.rating,m1.numberofratins,m2.rating,m2.numberofraters,ratingproduct,rating1squared,rating2squred);
emit(reducekey,reducevalue);
}
mapreduce阶段3
map(key,value){emit(key,value)}
reduce(key, values){
int groupsize=value.size();
int dotproduct=0;
int