天天看點

MapReduce程式設計(五) 單表關聯一、問題描述二、分析三、MapReduce程式四、輸出結果

下面給出一個child-parent的表格,要求挖掘其中的父子輩關系,給出祖孫輩關系的表格。

輸入檔案内容如下:

根據父輩和子輩挖掘爺孫關系。比如:

根據這三條記錄,可以得出Jack是Steven的長輩,而Alice和Jesse是Jack的長輩,很顯然Steven是Alice和Jesse的孫子。挖掘出的結果如下:

要求通過MapReduce挖掘出所有的爺孫關系。

解決這個問題要用到一個小技巧,就是單表關聯。具體實作步驟如下,Map階段每一行的key-value輸入,同時也把value-key輸入。以其中的兩行為例:

key-value和value-key都輸入,變成4行:

shuffle以後,Jack作為key值,起到承上啟下的橋梁作用,Jack對應的values包含Alice、Steven,這時候Alice和Steven肯定是爺孫關系。為了标記哪些是孫子輩,哪些是爺爺輩,可以在Map階段加上字首,比如小輩加上字首”-“,長輩加上字首”+”。加上字首以後,在Reduce階段就可以根據字首進行分類。