這是中國大學MOOC大數據算法的課程筆記
這一講是MapReduce一些相對複雜的應用
本講分爲兩個部分:
連接(Join)算法
圖算法
圖算法在後一篇文章中講述。
連接算法
笛卡爾積定義如下
在笛卡爾積上添加約束條件後的運算就是連接操作。如Theta連接和自然連接。連接在數據庫中是比較昂貴的操作。
下面是Hash Join用MapReduce的實現:
對於兩個表分別進行上述MapReduce過程操作:
將原表分塊,mapper按Hash值將其劃分爲不同的Hash桶,然後reducer根據不同的Hash值將桶聚合。
這樣兩個表的第一個reducer生成的結果對應相同的Hash桶,再把它們放到同一個merger中進行hash join。
使用MapReduce處理多個連接的操作,h取1到m的範圍數,Reducer取連接操作數的平方。
另一個例子是Hive中的repartition join
做連接的鍵是key,剩下的作爲value,在經過map以後,把這些pairs根據key進行分組,把具有相同key的元組分到同一個組當中(兩個表有相同key的元組)。在Reduce階段,根據表名做劃分後就可以做笛卡爾積。
多路連接的處理:將連接屬性相同的項放入同一個Reducer中。
相似連接對應相似查詢,如搜索輸入
這比一般的自然連接要慢。
用MR進行多重集相似連接的算法
Jaccard相似性:交集比並集
Cosine相似性:交集/兩個集合大小之和的平方根
Dice相似性等
兩種MR的工作
1、計算單元函數值:求一個集合的大小(個數)
2、計算合取函數值和相似性(合取函數:兩個集合的交集)
第一個MapReduce工作計算單元函數
其他MapReduce工作計算合取函數值和相似性
具體過程如下:
此爲第一個MapReduce過程。
在求出單元函數值後需要得出相似性。