一、好友推薦演算法在實際的社交環境中應用較多,比如qq軟體中的「你可能認識的好友」或者是facebook中的好友推介。常見的好友推介演算法有六度分割理論,三元閉包論和最基本的好友推介演算法。
學習和分享好友推介演算法。
假設使用者a有好友a1,a2,a3,則a1,a2,a3相互之間都可能通過好友a認識,是潛在的好友關係。如果使用者b有好友a1,a2,b1,則a1,a2,b1相互之間都可能通過好友b認識。如下圖所示
如上圖所示,a1,a2在潛在好友列表**現2次,說明a1,a2有2個共同好友,在上圖中即為a,b。當兩個潛在好友如果共同好友越多,則他們可能認識的可能性就越大,彼此之間推介機會就越高。演算法簡單介紹如下:首先需要遍歷所有使用者的好友列表生成兩兩間的潛在好友列表,計算所有使用者潛在好友列表中同一對潛在好友出現的次數。如上圖例子中a1,a2出現次數為2次。注意:a1:a2與a2:a1為相同的一對潛在好友,計算時應進行累加。再次計算同乙個使用者的潛在好友列表和出現的次數,如圖中a1使用者,a1與a2出現2次,a1與a3出現1次,a1與b1出現1次。如果只能給每個使用者推介乙個好友的話,a2與a1認識的可能性更大,優先推介a2。注意:還需要除去已經是該使用者好友的潛在好友列表。如果a1與a2已經是好友關係了,則不需要再次推介。
實驗資料:
資料流程:
二、mapreduce程式實現
package friends;..
.public
class
runjob
fileoutputformat.
setoutputpath
(job, outpath)
;//開始執行
boolean f = job.
waitforcompletion
(true);
if(f)
fileoutputformat.
setoutputpath
(job, outpath)
; f = job.
waitforcompletion
(true);
if(f)}}
catch
(exception e)
}/****/
static
class
extends
}}/**
* 保證好友順序一致
** @param user1
* @param user2
* @return
*/private string getfof
(string user1, string user2)
else}}
/** * 第二次map操作
*/static
class
extends
}/** * reduce階段 第一次
*/static
class
reducer1
extends
reducer
else}if
(flag)}}
/** * 第二次reduce
*/static
class
reducer2
extends
reducer
stringbuffer.
substring(0
, stringbuffer.
length()
-1);
context.
write
(new
text
(user)
,new
text
(stringbuffer.
tostring()
));}
}/**
* 自定義排序比較器
*/static
class
sortcomparator
extends
writablecomparator
/** * @param a
* @param b
* @return
*/@override
public
intcompare
(writablecomparable a, writablecomparable b)
}/**
* 分組比較器
*/static
class
groupcomparator
extends
writablecomparator
@override
public
intcompare
(writablecomparable a, writablecomparable b)
}}
結果:
.參考:
MapReduce案例 好友推薦
用過各種社交平台 如qq 微博 朋友網等等 的小夥伴應該都知道有乙個叫 可能認識 或者 好友推薦 的功能 如下圖 它的演算法主要是根據你們之間的共同好友數進行推薦,當然也有其他如愛好 特長等等。共同好友的數量越多,表明你們可能認識,系統便會自動推薦。今天我將向大家介紹如何使用mapreduce計算共...
求共同好友案例 mapreduce實現
friends.txt a b,c,d,f,e,o b a,c,e,k c f,a,d,i d a,e,f,l需求 求每兩個人的共同好友 a和b,a和c a b,c,d,f,e,o b a,c,e,k 好友列表作為k b a c a d a a b c b e b 將matask端的value 本人...
MapReduce 共同好友
下面是a b c d e 5個人的好友情況 a b c d b a c d e c a b d e d a b c e e b c d 第一行的意思是a有bcd 3個好友,下面幾行的以此類推。請使用 map reduce 任務,完成共同好友這個功能。要求 1.描述清楚map和reduce函式的的輸入...