spark实现user CF

user CF是基于相似用户的推荐方法,实现这种推荐的基本思路是:计算出相似用户得分,获取相似用户的物品集合的打分,最后两个得分相乘,得出相似用户推荐的物品集合topN。    

实这种推荐可以使用公式余弦相似:cosine= a*b/(|a|*|b|)

具体思路和步骤如下:

一.从hive中获取数据:(hive建表,user_id、item_id、rating、timestamp)

             启动spark  ./sbin/start-all 

                启动spark-shell   ./bin/spark-shell

                         val df = spark.sql(select * from default.udata) 

数据及label形式

二.计算相似用户:

1. 先计算分母:|a| = sqrt(a1^2+a2^2+a3^2+.....+an^2),

        把导入的表格变成RDD,取出user_id和rating,以用户为groupBy,把该用户的所有打分数据平方再相加再开根号,最后再转换为dataframe,使用RDD的目的是更加方便操作,最后转换为dataframe的目的是可视化更好,在后期的使用中也非常便利,在转换中要导入隐式转换(import spark.implicits._)

2.第二步计算分子:a*b

      先需要一张新表,

val df = udata.selectExpr("user_id as user_v","item_id as item_id","rating as rating_v")

df新表join到udata表格,filter(user_id<user_v),形成相似矩阵,计算在同一个item下的评分乘积rating*rating_v,在相乘的时候要注意类型的转换,string->double,把乘积相加,计算出完整的分子部分

3.最后把分子和分母代入,得到相似用户集合(user_id、user_v、sim_score)

三、获取相似用户的物品集合

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容