目录
一、简介
好友推荐功能简单的说是这样一个需求,预测某两个人是否认识,并推荐为好友。
二、思路
某两个非好友的用户,他们的共同好友越多,那么他们越可能认识。
比如,原始数据如下
Tom Cat Hello Hadoop Spring
Cat Hello Spring
Hello Tom Netty Hadoop Cat
Hadoop Tom Hello Netty Spring
Spring Tom Cat Hadoop
Netty Hello Hadoop
每一行表示某个用户的好友列表,每一行的第一个名称为该用户的用户名,后面跟的用户名表示他的好友
那么我们需要得到如下的数据
Tom Netty 2
Cat Netty 1
Cat Hadoop 3
Hello Spring 3
Spring Netty 1
这里每一行的两个用户名即为预测的可能认识的两个用户,数字表示他们共有的好友数
map:
将每行的人名进行组合,最后输出key为人名组合,value为标志位。需要注意的是,人名需要按照一定顺序排序,防止同样的人名组合产生两个不同的key
标志位0,表示一定是直接好友,也就是用户本人和他用户列表中的每个用户是直接好友。
标志位1,表示可能是间接好友,因为每次只能处理一行,所以在某一行中两个人不是直接好友,但是在其他人的好友列表中,他们可能是直接好友,比如Cat和Hello,在第一行我们只能确定他们可能是间接好友,在第二行我们才知道他们其实是直接好友。然而,Cat和Hadoop才是真正的间接好友。因此这里需要设置为标志位,在reduce阶段才能确认是不是真正的间接好友。选择1为标志位也方便reduce阶段的累加计算。

本文介绍了如何利用Hadoop的MapReduce框架来实现好友推荐功能。通过分析原始数据,找出非好友用户之间的共同好友数量,预测两人是否可能认识。Map阶段将人名组合并设置标志位,Reduce阶段则根据标志位筛选并累加计算,最终确定间接好友关系。
最低0.47元/天 解锁文章
578





