用MapReduce做相似度分析

jopen 10年前發布 | 11K 次閱讀 MapReduce 分布式/云計算/大數據

Q:

有一批數據(10億量級),數據內容包括:

類型
id INT
content String
id為key,全局唯一
content為一個句子

列之間以\t分割

like:
1  “互聯網夠公司的日志無處不在,web日志,js日志,搜索日志,監控日志等等”
2  "對于這些日志的離線分析(Hadoop),wget&rsync雖然人力維護成本較高,但可以滿足功能行需求。但對于這些日志的實時分析需求(例如實時推薦,監控系統),則往往必須要引入一些“高大上”的系統"
計算每行數據的content和其他數據content的相似度

A:

兩輪MapReduce:
第一輪:
按照一定規則分割content,并以分割后的content內容為key,value為id,reduce階段對value做排序后兩兩輸出,實例如下:
原始數據:
10 X
20 Y
30 Z
假設X可以分割為A、B、C, Y可以分割為A、C、D, Z可以分割為A、D
則第一輪mapper的輸出為:
<A,10>
<B,10>
<C,10>
<A,20>
<C,20>
<D,20>
<A,30>
<D,30>
使用分割后的content做key
reducer的輸入為:
A {10,20,30}
B {10}
C {10,20}
D {10}
reduce計算邏輯:對value組按大小排序,排序后按序兩兩輸出,組大小為1的不輸出
reducer輸出為
10,20      ----from A     {10,20,30}
10,30      ----from A     {10,20,30}
20,30      ----from A     {10,20,30}
10,20      ----from C {10,20}


第二輪map-reduce:
對第一輪輸出的數據做聚合,value為出現次數
10,20 2
10,30 1
20,30 1

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!