MapReduce案例 好友推薦

2021-09-28 11:11:15 字數 2230 閱讀 9514

用過各種社交平台(如qq、微博、朋友網等等)的小夥伴應該都知道有乙個叫 "可能認識" 或者 "好友推薦" 的功能(如下圖)。它的演算法主要是根據你們之間的共同好友數進行推薦,當然也有其他如愛好、特長等等。共同好友的數量越多,表明你們可能認識,系統便會自動推薦。今天我將向大家介紹如何使用mapreduce計算共同好友

假設有以下好友列表,a的好友有b,c,d,f,e,o;   b的好友有a,c,e,k 以此類推

那我們要如何算出a-o使用者每個使用者之間的共同好友呢?

a:b,c,d,f,e,o

b:a,c,e,k

c:f,a,d,i

d:a,e,f,l

e:b,c,d,m,l

f:a,b,c,d,e,o,m

g:a,c,d,e,f

h:a,c,d,e,o

i:a,o

j:b,o

k:a,c,d

l:d,e,f

m:e,f,g

o:a,h,i,j

下面我們將演示分步計算,思路主要如下:先算出某個使用者是哪些使用者的共同好友,

如a是b,c,d,e等的共同好友。遍歷b,c,d,e兩兩配對如(b-c共同好友a,注意防止重複b-c,c-b)作為key放鬆給reduce端,

這樣reduce就會收到所有b-c的共同好友的集合。可能到這裡你還不太清楚怎麼回事,下面我給大家畫乙個圖。

由上可知,此次計算由兩步組成,因此需要兩個mapreduce程式先後執行

第一步:通過mapreduce得到 某個使用者是哪些使用者的共同好友。
public class friendsdemosteponedriver }}

static class friendsdemosteponereducer extends reducer

context.write(key,new text(sb.tostring()));}}

public static void main(string args) throws ioexception, classnotfoundexception, interruptedexception

}

執行的到的結果如下:

由圖可見:i,k,c,b,g,f,h,o,d都有好友a;a,f,j,e都有好友b。接下來我們只需組合這些擁有相同的好友的使用者,

作為key傳送給reduce,由reduce端聚合d得到所有共同的好友

/**

* 遍歷有同個好友的使用者的列表進行組合,得到兩人的共同好友

*/public class friendsdemosteptwodriver }}

}static class frienddemosteptworeducer extends reducer

context.write(key,new text(sb.tostring()));}}

public static void main(string args) throws ioexception, classnotfoundexception, interruptedexception

}

得到的結果如下:

如圖,我們就得到了擁有共同好友的使用者列表及其對應關係,在實際場景中再根據使用者關係(如是否已經是好友)進行過濾,在前端展示,就形成了我們所看到"可能認識"或者"好友推薦"啦~

但是思路和方向基本一致,如果有更好的建議或演算法,歡迎與小吳一起討論喔~

如果您喜歡這篇文章的話記得like,share,comment喔(^^)

MapReduce案例 好友推薦簡單實現

一 好友推薦演算法在實際的社交環境中應用較多,比如qq軟體中的 你可能認識的好友 或者是facebook中的好友推介。常見的好友推介演算法有六度分割理論,三元閉包論和最基本的好友推介演算法。學習和分享好友推介演算法。假設使用者a有好友a1,a2,a3,則a1,a2,a3相互之間都可能通過好友a認識,...

求共同好友案例 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函式的的輸入...