這是一次課程做業,實現有點粗糙。有更好的方案,歡迎交流。git
咱們須要評估每兩個用戶之間的類似度,以此來發現社區。如今咱們以每對用戶的共同關注人數量做爲評估標準。github
原始數據格式:排序
關注人_id:粉絲_1_id 粉絲_2_idget
但願獲得的輸出格式是it
用戶_id:類似的人_1_id 類似的人_2_idio
使用兩次mapreduce 過程社區
第一次map
輸入格式:followee_1_id:follower_1_id follower_2_id follower_3_idim
map:將後面的粉絲兩兩配對,並輸出。key爲 id-id 的形式,value爲1,表示這對用戶有一個共同好友數據
reduce: 相似wordcount,將相同key的value加起來
第二次
map:讀取並切分,好比將 A-B 4 分爲 a b 4 和 b a 4
reduce:將同一鍵的值合併到列表中, 並按相反的順序對其進行排序。而後輸出格式是 User_2:Similiar_Person_1 Similiar_Person_2 ...
此處只排出前十人。
代碼:
https://github.com/londist/Community-dectection
數據集:
Small scale dataset https://www.dropbox.com/s/ntzk80l5iiiuh50/Small%20Dataset.txt?dl=0
Medium scale dataset https://www.dropbox.com/s/6sxnnadhxbyk7ho/Medium%20Dataset.txt?dl=0
Large scale dataset https://www.dropbox.com/s/lrlgz50m88j6fpc/Large%20Dataset.txt?dl=0