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/hadoop

hadoop伪分布式安装(单机版) HDFS +Yarn


 

posted @ 2020-09-16 20:08  咔咔kk  阅读(765)  评论(0编辑  收藏  举报