spark商品协同过滤

思路

首先,介绍一下传统的商品协同过滤思路:

  1. 获取一段周期内用户-商品交互历史数据记录;
  2. 根据交互历史记录,计算两两商品相似度,得到商品相似度矩阵;
  3. 根据用户的历史交互商品列表,从商品相似度矩阵中查询每一个商品的相似商品列表,按照相似度排序(出现多次的得分相加),得到最终推荐结果。

转换为spark的思想去考虑,则实现步骤应如下:

  1. 获取一段周期内用户-商品交互历史RDD,(wid, gid)
  2. 计算用户交互过的所有商品的两两相似度,得到 ((gid1, gid2), score)
  3. 根据用户最近交互的n个商品进行推荐,并对推荐结果进行过滤,过滤已交互的商品。

RDD的转换

首先是求解相似度矩阵,可以直接使用spark的笛卡尔积算子cartesian,但存在计算冗余,且时间较慢。在这里我们没有直接使用,而是用下图的方式一步步转换得到共现矩阵。
rdd转换链路
接下来,根据用户商品交互数据进行itemcf推荐,

 val resRdd = item_user.join(item_sim)
      .map(x => ((x._2._1, x._2._2._1), x._2._2._2))
      .reduceByKey(_+_)
      .map(x => (x._1._1, (x._1._2, x._2)))
      .groupByKey()

根据实际需求选择是否过滤用户交互过的商品,在这里我们对已购商品进行了过滤。

以上就是基于spark的商品协同过滤推荐的全部流程。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值