下面給出一個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階段就可以根據字首進行分類。