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_iddouble,把乘积相加,计算出完整的分子部分

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

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

你可能感兴趣的:(spark实现user CF)