ideaMapReduce社交好友推荐代码
时间: 2023-09-11 14:09:00 浏览: 56
以下是一个基于Hadoop MapReduce的社交好友推荐代码示例:
mapper.py:
```python
#!/usr/bin/env python
import sys
# 找到所有的好友对
def find_friends_pairs(line):
user_friends = line.split('\t')
if len(user_friends) > 1:
user = user_friends[0]
friends = user_friends[1].split(',')
for friend in friends:
# 发射以字母序排序的好友对为键,好友对的共同好友列表为值
emit((user, friend if user < friend else friend, (friends, None)))
# 找到所有的好友对的共同好友
for friend_pair in combinations(friends, 2):
friend1 = friend_pair[0]
friend2 = friend_pair[1]
# 发射以字母序排序的好友对为键,好友对的共同好友列表为值
emit((friend1, friend2 if friend1 < friend2 else friend2), (friends, user))
if __name__ == "__main__":
for line in sys.stdin:
find_friends_pairs(line.strip())
```
reducer.py:
```python
#!/usr/bin/env python
import sys
# 找到所有的好友对
def find_friends_pairs(line):
user_friends = line.split('\t')
if len(user_friends) > 1:
user = user_friends[0]
friends = user_friends[1].split(',')
for friend in friends:
# 发射以字母序排序的好友对为键,好友对的共同好友列表为值
emit((user, friend if user < friend else friend, (friends, None)))
# 找到所有的好友对的共同好友
for friend_pair in combinations(friends, 2):
friend1 = friend_pair[0]
friend2 = friend_pair[1]
# 发射以字母序排序的好友对为键,好友对的共同好友列表为值
emit((friend1, friend2 if friend1 < friend2 else friend2), (friends, user))
if __name__ == "__main__":
for line in sys.stdin:
find_friends_pairs(line.strip())
```
使用命令行运行:
```bash
cat friends.txt | python mapper.py | sort | python reducer.py
```
其中,friends.txt 是包含用户好友关系的文件,每行格式为:
```
user1\tfriend1,friend2,friend3...
```
输出结果为:
```
friend1\tfriend2\t共同好友列表
friend1\tfriend3\t共同好友列表
...
```
共同好友列表为一个列表,包含了两个好友的所有共同好友。