hadoop例項:電子商務網站商品推薦系統
薦系統無處不在
比如:
購買成功後:購買了該商品的其他使用者購買了以下商品
搜尋成功後:您可能感興趣的以下商品
主頁或廣告:您可能感興趣的以下商品
如下圖,使用者A購買物品AC;使用者B購買物品ABC;當用戶C購買物品A後,根據資料分析發現,購買物品A的使用者大多數購買了物品C,所以提醒使用者C”購買了該商品的其他使用者購買了以下商品:物品C”。 下面我們就模擬實現這個功能
這裡有一堆資料,記錄的是使用者購物記錄;要求使用者推薦和他之前喜歡的物品相似的物品。
item_id,user_id,action,vtime i161,u2625,click,2014/9/18 15:03 i161,u2626,click,2014/9/23 22:40 i161,u2627,click,2014/9/25 19:09 i161,u2628,click,2014/9/28 21:35 i161,u2629,click,2014/9/27 16:33 i161,u2630,click,2014/9/5 18:45 i161,u2631,click,2014/9/29 16:57 i161,u2632,click,2014/9/24 21:58 i161,u2633,click,2014/9/25 22:41 i161,u2634,click,2014/9/16 13:30 i161,u2635,click,2014/9/20 9:23 i161,u2636,click,2014/9/21 1:00 i161,u2637,click,2014/9/24 22:51 i161,u2638,click,2014/9/27 22:40
解決思路:
將資料拆分使用者對物品的喜愛度得分矩陣 與 物品的同現矩陣 如下圖,矩陣相乘得到的就是推薦商品
101…107指商品分數 U3指使用者評分
R指矩陣乘積,如 40=2*(5+3+4+4+2+2+1)
R最高的代表推薦商品
需要五次mapReduce處理資料
第一次mapReduce做的事情?去重複資料;
第二次mapReduce做的事情?
按使用者分組,計算所有物品出現的組合列表,得到使用者對物品的喜愛度得分矩陣
u13 i160:1,
u14 i25:1,i223:1,
u16 i252:1,
u21 i266:1,
u24 i64:1,i218:1,i185:1,
u26 i276:1,i201:1,i348:1,i321:1,i136:1,
第三次mapReduce做的事情?
對物品組合列表進行計數,建立物品的同現矩陣
i100:i100 3
i100:i105 1
i100:i106 1
i100:i109 1
i100:i114 1
i100:i124 1
第四次mapReduce做的事情?
把同現矩陣和得分矩陣相乘
u13 i100,3
u13 i100,2
u13 i105,1
u14 i100,3
u14 i105,1
第五次mapReduce做的事情?
把相乘之後的矩陣相加獲得結果矩陣
u13 i100,5
u13 i105,1
u14 i100,3
u14 i105,1
程式碼實現如下:
網址: https://github.com/hzcjd8/bigData