第3节 mapreduce高级:2、3、课程大纲&共同好友求取步骤一、二

mac2022-06-30  98

第五天课程大纲:1、社交粉丝的数据分析:求共同好友2、倒排索引的建立3、自定义inputFormat合并小文件 4、自定义outputformat5、分组求topN6、MapReduce的其他补充 了解7、mapreduce的参数优化 理解8、yarn的资源调度管理

例子1:社交粉丝数据分析

逻辑分析

以下是qq的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的,即A的好友列表中有B,但B可能把A删除了

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

求出哪些人两两之间有共同好友,及他俩的共同好友都有谁?

教案上的解题思路(未使用该思路):

第一步 

map

读一行   A:B,C,D,F,E,O

输出    <B,A><C,A><D,A><F,A><E,A><O,A>

在读一行   B:A,C,E,K

输出   <A,B><C,B><E,B><K,B>

 

REDUCE

拿到的数据比如<C,A><C,B><C,E><C,F><C,G>......

输出: 

<A-B,C>

<A-E,C>

<A-F,C>

<A-G,C>

<B-E,C>

<B-F,C>.....

 

第二步

map

读入一行<A-B,C>

直接输出<A-B,C>

 

reduce

读入数据  <A-B,C><A-B,F><A-B,G>.......

输出: A-B  C,F,G,.....

实际思路:

可以使用多个mapreduce来实现B是哪些用户的好友???B 出现在这么多人的好友列表里面 :A-E-F-J那么就可以说 A-E B A-F B A-J B E-F B E-J B F-J B

问题:如何求某一个好友,出现在哪些用户列表里面B-A C-A D-A F-A E-A O-A B-E C-E D-E M-E L-E

如果以B作为key2 以用户 作为Value2相同B的数据都会到同一个reduce里面形成一个集合 B <A,E>然后在reduce当中将我们的数据转换成这样的一种形式 key3: A-E-F-J value3:B

以冒号切开,下标为1的字段再用逗号切开,然后循环遍历

用户列表 好友F-D-O-I-H-B-K-G-C- AE-A-J-F- BK-A-B-E-F-G-H- CG-K-C-A-E-L-F-H- DG-F-M-B-H-A-L-D- EM-D-L-A-C-G- FM- GO- HC-O- IO- JB- KE-D- LF-E- MJ-I-H-A-F- O

 

E-A-J-F- B E A J F 对切割之后的数组进行排序 A E F JG-K-C-A-E-L-F-H- D G K C A E L F H 对切割之后的数组进行排序 A C E F G H L

首先对这些字符串进行切割,按照 -进行切开成为一个数组,然后再对数组进行排序,然后双层for循环遍历往外发送数据给reduce

key2 value2 A-E B E-J B-E-F BA-J B-A-F B-J-F B-

G-K D-G-C D-G-A D-G-E D-G-L D-G-F D-G-H D-

A-E D

到reduce阶段形成这种形式A-E <B,D>可以求出 A-E 有共同好友 B和 D

 

详见代码

转载于:https://www.cnblogs.com/mediocreWorld/p/11029304.html

最新回复(0)