MapReduce-案例共同好友分析

需求

以下是qq的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的)
求出哪些人两两之间有共同好友,及他俩的共同好友都有谁?

A:B,C,D,F,E,O
B:A,C,E,K
C:A,B,D,E,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

思路分析 

源数据
A:B,C,D,F,E,O
B:A,C,E,K
C:A,B,D,E,I 
......
我们想要的分析结果
A-B		C-E
A-C		B-D-E
B-C     A-E

MapReduce1:

MapReduce思想 
Map->分 Reduce->合
K1	V1
0	A:B,C,D,F,E,O
15	B:A,C,E,K
26	C:A,B,D,E,I 
-----------Map阶段-----------
-----------Map阶段的MapTak阶段-----------
K1	V1 ==>K2	V2
K2好友V2
B的好友A(注意:这样理解错误)(数据中的好友关系是单向的)
K2是V2的好友
B是A的好友
K2	V2
B	A
C	A
D	A
F	A
E	A
O	A
A	B
C	B
E	B
K	B
A	C
B	C
D	C
E	C
I	C
-----------Map阶段的MapTak阶段-----------
------------Shuffle阶段-------------------
------------Map阶段的的Shuffle阶段-------------------
排序
K2	V2
A	B
A	C
B	A
B	C
C	B
C	A
D	A
D	C
E	A
E	B
E	C
F	A
I	C
K	B
O	A
------------Map阶段的的Shuffle阶段-------------------
-----------Map阶段-----------

-----------Reduce阶段---------------------------
------------Reduce阶段的Shuffle阶段-------------------
分组  - 相同键的值会放在同一个集合<>
K2	V2
A	<B,C>
B	<A,C>
C	<B,A>
D	<A,C>
E	<A,B,C>
F	A
I	C
K	B
O	A

K2是V2的好友 V2成员不止一个时 表示K2是V2[....]的好友
A	B-C		代表A是B和C的好友
------------Reduce阶段的Shuffle阶段-------------------
------------Shuffle阶段---------------------------

-----------Reduce阶段的ReduceTask阶段---------------------------
K2	V2 ==>K3	V3
这里完成键值互换即可 因为这里的V2有些是集合 处理起来步骤会多一点 留到下一个MapReduce 转为Text 再拆分拼接 则更加符合MapReduce的思想
当然硬是要在这里拆也是可以 遍历集合 拼成字符串 转为数组排序分组即可(不知道有没有更好的方法)

K2	V2 ==>K3	V3
K2	V2
A	<B,C>
B	<A,C>
C	<B,A>
D	<A,C>
E	<A,B,C>
F	A
I	C
K	B
O	A
------------------
K3		V3
B-C     A	
A-C     B	
B-A     C	
A-C     D	
A-B-C	E	
A       F	
C       I	
B       K	
A       O

B-C     A 代表B和C的共同好友是A
K3的共同好友V3 K3成员只有一个时 表示K3的好友V3
-----------Reduce阶段的ReduceTask阶段---------------------------
-----------Reduce阶段---------------------------


MapReduce2:

   K1		V1
offset  B-C     A
offset  A-C     B
offset  B-A     C
offset  A-C     D
offset  A-B-C	E
offset  A       F
offset  C       I
offset  B       K
offset  A       O

MapTask
K1	V1 ==>K2	V2

V1要转为K2的部分,首先要按字典顺序排列 便于转为键后 Shuffle的排序分组
V1要转为K2的部分,成员个数大于2时,需求是求两人的共同好友 需要两两拆分

K2的共同好友V2 K2成员只有一个时 表示K2的好友V2
K2		V2
B-C     A	
A-C     B	
A-B     C	
A-C     D	
A-B		E
A-C		E
B-C     E	
A       F	
C       I	
B       K	
A       O

Shuffle 排序
K2		V2
A-B		E
A-B     C
A-C     D
A-C		E
A-C     B
A       F  
A       O
B-C     A	
B-C     E	
B       K	
C       I	

Shuffle 分组-相同键的值会放在同一个集合<>
K2		V2
A-B		<E,C>
A-C     <D,E
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值