MapReduce案例 好友推薦簡單實現

2021-09-24 13:39:24 字數 2689 閱讀 5245

一、好友推薦演算法在實際的社交環境中應用較多,比如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函式的的輸入...