MapReduce实现共同好友,要求实现下列要求: 以下是微信的好友列表数据.冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的)e A:B,C,D,F,E,O,E B:A,C,E,K C:F,A,D,l 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 l:A,O ]:B,O K:A,C,D L:D,E,F M:E.F,G O:A,H,I,J 求出哪些人两两之间有共同好友.及他俩的共同好友都有谁?具体代码实现怎么写
时间: 2023-09-11 21:12:21 浏览: 274
大数据学习(八):mapreduce编程案例-求两人之间的共同好友
好的,下面是基于Hadoop MapReduce实现共同好友的代码实现,包括Mapper和Reducer函数:
```python
from mrjob.job import MRJob
class CommonFriends(MRJob):
def mapper(self, key, line):
# 解析输入数据
user, friends = line.strip().split(':')
friends_list = friends.split(',')
# 对于每个好友,将其和用户组合成一个键,并将好友列表作为值输出
for f in friends_list:
yield (min(user, f), max(user, f)), set(friends_list)
def reducer(self, pair, friend_lists):
# 对于每个键,取所有好友列表的交集,得到共同好友列表
common_friends = set.intersection(*friend_lists)
# 输出两两之间共同好友的列表
yield pair, list(common_friends)
if __name__ == '__main__':
CommonFriends.run()
```
以上代码使用了Python的mrjob库,可以方便地在Hadoop集群上运行MapReduce作业。具体使用方法可以参考mrjob的官方文档:https://mrjob.readthedocs.io/。
需要注意的是,为了方便起见,上述代码中假设输入数据中的好友关系是单向的,即如果A是B的好友,那么输入数据中只会有一条记录,即"A:B",而不会有"B:A"的记录。如果输入数据中存在双向的好友关系,需要在Mapper中将每个好友对应的所有用户都输出一遍,即将"A:B"和"B:A"都输出。
阅读全文