共同好友

mapreduce关于共同好友的问题

以下是qq的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的)
A:B,C,D,F,E,O
B:A,C,E,K
C:F,A,D,I
D:A,E,F,L
E:B,C,D,M,L
F:A,B,C,D,E,O,M
G:A,C,D,E,F
H:A,C,D,E,O
I:A,O
J:B,O
K:A,C,D
L:D,E,F
M:E,F,G
O:A,H,I,J
求出哪些人两两之间有共同好友,及他俩的共同好友

解题思路
第一步 maptask1

map阶段
先把好友和用户离成键值对,以好友做key
以A为例
B:A C:A D:A F:A E:A O:A
以B为例
A:B C:B E:B K:B
以C为例
F:C A:C D:C I:C
以D为例
A:D E:D F:D L:D
以E为例
B:E C:E D:E M:E L:E

reduce阶段
这个时候就拿到了每一个好友被哪些人所共有
B:A B:E B:F B:J
C:A C:B C:E C:F C:G C:H C:K

这个时候可以以好友的所属用户做为key,好友本人做value写入文件中,如下所示
A-E-F-J:B
A-B-E-F-G-H-K:C

第二步 maptask2

map阶段
取上一个阶段reduec的结果
得到的值为
A-E-F-J:B
A-B-E-F-G-H-K:C

拆分好友所属用户,以俩俩一组拆分为key,好友本人为value
这样就得到了每两个用户之间至少有一个共同好友
A-E B
A-F B
A-J B
E-F B
E-J B
F-J B

A-B C
A-E C
A-F C
A-G C
A-H C
A-K C
B-E C
B-F C
B-G C
B-H C
B-K C
E-F C
E-G C
E-H C
E-K C
F-G C
F-H C
F-K C
G-H C
G-K C
G-H C

reduce 阶段
聚合value
得到两两用户之间的共同好友
A-E B,C
A-F B,C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值