Hadoop社区检测问题之相似用户问题

Posted Dodo·D·Caster

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop社区检测问题之相似用户问题相关的知识,希望对你有一定的参考价值。

问题描述:

在twitter中,用户可以follow其他用户。此时,该用户为follower,而被关注的用户则是followee。该关系为单向关系,即 A follow B 的同时 B 不一定会 follow A。

我们需要找出与每个用户最相似的top K个用户,相似度用共同关注的用户数量来衡量。例如,A关注了C D F,而B关注了A C D,则AB的共同关注为C D, A与B之间的相似度为2。

数据集:

地址:https://www.dropbox.com/s/g1nthvj98iaikly/twitter_combined.txt.gz?dl=0

该数据集中的数据有两列,含义如下:

1 2 //表示用户2关注了用户1

1 3 //表示用户3关注了用户1

思路:

可以用hadoop的mapreduce来做,我们分为3个mapreduce。

第一个mapreduce:数据合并

用来把数据合并,如

1 2

1 3

变成

1 2 3

表示用户2和用户3关注了用户1。也就是说,key为followee,value为followers。

所以实际的思路很简单,map阶段output (1,2)(1,3)

reduce会收到(1,2,3),把2,3变成text传入value即可。

第二个mapreduce:计算相似度

用来计算不同用户之间的相似度。我们知道,对于同一个followee的不同followers,他们彼此都有共同的followee,所以相似度+1.

所以map阶段,我们对这些followers做笛卡尔积,将笛卡尔积的结果作为key,value赋1,例如

1 2 3 4

则变成(”2 3”, 1),(”2 4”, 1),(”3 2”, 1),(”3 4”, 1),(”4 2”, 1),(”4 3”,1)。注意要去掉”2 2”,“3 3”,“4 4”这种无效数据。

如果用户2和用户3同时关注了3个用户,则reduce会收到(”2 3”, 1,1,1)累加则可得到相似度3,作为reduce的outputvalue

第三个mapreduce:排序top K

用来计算每个用户的最相似的K个用户。上一个mapreduce之后,我们得到了每对用户的相似度,则这次只需要按相似度进行排序,并输出前K个即可。

map阶段,key为用户A,value为用户B+用户AB的相似度,则reduce会得到和用户A有共同关注的所有用户及其相似度。降序排序并将value设置为前K个相似用户的text即可。

代码:

考虑到作业查重问题,我将稍晚上传代码和运行结果。

以上是关于Hadoop社区检测问题之相似用户问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 TensorFlow 进行图像相似度检测

Hadoop初级之shell脚本

Hadoop学习------Hadoop安装方式之:单机部署

2前奏之基于用户的协同过滤算法:UserCF

检测其他用户位置

Hadoop IO操作之校验和