测试数据
100,200 300 400 500 600 700 800
200,100 300 400 500 700
300,100 200 400 500 600 700
400,100 200 300 700 800
500,100 200 300 700 800
600,100 300
700,100 200 300 400 500 800
800,100 400 500 700
注意:测试数据中,逗号“,”前为一个用户的标识,逗号“,”后为该用户的好友。而且,用户与好友之间是互为好友的,例如:100的用户中有好友200,则200的用户中一定有好友100
分析
要找到共同好友,需要把每两个用户的好友都进行比较。map阶段就是把每两个用户的好友都找出来;reducer阶段就是找出每两个用户的共同好友。
map阶段:把每一行的数据中,用户和他的一个好友作为key,以他的所有好友作为value,例如用户100,他的map输出为:
100,200 200 300 400 500 600 700 800
100,300 200 300 400 500 600 700 800
100,400 200 300 400 500 600 700 800
100,500 200 300 400 500 600 700 800
100,600 200 300 400 500 600 700 800
100,700 200 300 400 500 600 700 800
100,800 200 300 400 500 600 700 800
最终,map的输出为:(key值的两个用户标识按从小到大的顺序排列)
100,200 200 300 400 500 600 700 800
100,300 200 300 400 500 600 700 800
100,400 200 300 400 500 600 700 800
100,500 200 300 400 500 600 700 800
100,600 200 300 400 500 600 700 800
100,700 200 300 400 500 600 700 800
100,800 200 300 400 500 600 700 800
100,200 100 300 400 500 700
200,300 100 300 400 500 700
200,400 100 300 400<