您的位置:首页 > 运维架构

Hadoop/Spark推荐系统(一)——共同好友

2017-09-22 19:30 886 查看

输入

mapper-input: #好友关系是对称的,整个数据的关系边是偶数

(u1,[f1,f2,f3])

(u2,[f2,f3])

(f1,[u1,f3])

(f2,[u1,u2])

(f3,[u1,u2,f1])

mapper-output

将一条用户的好友列表数据,拆成这个用户每个好友对为key的表示形式(key的表示字母或数字有序),value依然为好友里列表形式,共12组

([f1,u1],[f1,f2,f3])

([f2,u1],[f1,f2,f3])

([f3,u1],[f1,f2,f3])

([f2,u2],[f2,f3])

([f3,u2],[f2,f3])

([f1,u1],[u1,f3])

([f1,f3],[u1,f3])

([f2,u1],[u1,u2])

([f2,u2],[u1,u2])

([f3,u1],[u1,u2,f1])

([f3,u2],[u1,u2,f1])

([f3,f1],[u1,u2,f1])

shuffle-output

依照对称性,key相同的合并,数量正好减少一半,为6组

([f1,u1],[f1,f2,f3],[u1,f3])

([f2,u1],[f1,f2,f3],[u1,u2])

([f3,u1],[f1,f2,f3],[u1,u2,f1])

([f2,u2],[f2,f3],[u1,u2])

([f3,u2],[f2,f3],[u1,u2,f1])

([f1,f3],[u1,f3],[u1,u2,f1])

reduce-output

找出value里的两个list里重复的元素,即为共同好友

([f1,u1],[f3])

([f2,u1],[])

([f3,u1],[f1])

([f2,u2],[])

([f3,u2],[])

([f1,f3],[u1])

MR版本

map(key,value){
reduceValue=(<friend_1><friend_2>...<friend_N>)
foreach friend in (<friend_1><friend_2>...<friend_N>){
reduceKey=buildSortedKey(person,friend)
emit(reducerKey,reducerValue);
}
}

reduce(key,value){
outputValue=intersection(List_1,List_2,...,List_M)
emit(key,outputCalue);
}


Spark版本

map(P,{F_1,F_2,...,F_n}){
friends={F_1,F_2,...,F_N};
for(f:friends){
key = buildSortedTuple(P,f);
emit(key,friends);
}
}

reduce(key,values){
commonFriends=intersection(values);
emit(key,friends)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息