0

我目前正在计划为MovieLens数据集上的用户使用ALS算法生成电影推荐一切正常,但有些时候ALS算法会返回已评级的电影,我想从建议中排除它们,建议如下。如何生成个人建议的用户,排除他评为斯卡拉正在使用spark MLlib ALS算法的电影?

`val moviesRatedbyUser = ratings.keyBy(_._2.user).lookup(206547) 
println("rated movies are" + moviesRatedbyUser) 
val candidates = 
sc.parallelize(movies.keys.filter(!moviesRatedbyUser(_)).toSeq) 
val recommendations = bestModel.get 
    .predict(candidates.map((206547, _))) 
    .collect() 
    .sortBy(- _.rating) 
    .take(10) 

var i = 1 
println("Movies recommended for you:") 
recommendations.foreach { r => 
println("%2d".format(i) + ": " + movies(r.product)) 
i += 1 
}` 

在这里,我试图评级查找用户ID RDD打印语句返回 moviesRatedbyUser: Seq[(Long, org.apache.spark.mllib.recommendation.Rating)] = WrappedArray((3,Rating(206547,80,1.0))) 我想知道我怎么只抓住(在这种情况下80)的movieid,这样我可以排除它从建议中产生

回答

0

想知道以下是怎么做的代码是

val moviesForUser = ratings.keyBy(_._2.user).lookup(206547) 
val ratingsformovies = moviesForUser.toMap.values.map(elem => 
(elem.product)).toSeq // answer I wanted is this line 
val candidates = 
sc.parallelize(movies.keys.filter(!ratingsformovies.contains(_)).toSeq) 
val recommendations = bestModel.get 
.predict(candidates.map((206547, _))) 
.collect() 
.sortBy(- _.rating) 
.take(10) 

var i = 1 
println("Movies recommended for you:") 
recommendations.foreach { r => 
println("%2d".format(i) + ": " + movies(r.product)) 
i += 1 
} 
相关问题