scala – Spark 2.0 ALS建议如何向用户推荐
发布时间:2020-12-16 09:51:42 所属栏目:安全 来源:网络整理
导读:我已按照链接中的指南进行操作 http://ampcamp.berkeley.edu/big-data-mini-course/movie-recommendation-with-mllib.html 但这已经过时,因为它使用了spark Mlib RDD方法. New Spark 2.0具有DataFrame方法. 现在我的问题是我有更新的代码 val ratings = spar
|
我已按照链接中的指南进行操作
http://ampcamp.berkeley.edu/big-data-mini-course/movie-recommendation-with-mllib.html 但这已经过时,因为它使用了spark Mlib RDD方法. New Spark 2.0具有DataFrame方法. val ratings = spark.read.textFile("data/mllib/als/sample_movielens_ratings.txt")
.map(parseRating)
.toDF()
val Array(training,test) = ratings.randomSplit(Array(0.8,0.2))
// Build the recommendation model using ALS on the training data
val als = new ALS()
.setMaxIter(5)
.setRegParam(0.01)
.setUserCol("userId")
.setItemCol("movieId")
.setRatingCol("rating")
val model = als.fit(training)
// Evaluate the model by computing the RMSE on the test data
val predictions = model.transform(test)
现在问题是,在旧代码中,获得的模型是MatrixFactorizationModel,现在它有自己的模型(ALSModel) 在MatrixFactorizationModel中你可以直接做 val recommendations = bestModel.get .predict(userID) 这将给出用户喜欢它们的概率最高的产品列表. 但现在没有.predict方法.任何想法如何推荐给定用户ID的产品列表 解决方法
在模型上使用transform方法:
import spark.implicits._
val dataFrameToPredict = sparkContext.parallelize(Seq((111,222)))
.toDF("userId","productId")
val predictionsOfProducts = model.transform (dataFrameToPredict)
有一个jira票证来实现推荐(用户|产品)方法,但它还没有在默认分支上 现在你有了DataFrame和用户分数 您只需使用orderBy和limit来显示N个推荐产品: // where is for case when we have big DataFrame with many users
model.transform (dataFrameToPredict.where('userId === givenUserId))
.select ('productId,'prediction)
.orderBy('prediction.desc)
.limit(N)
.map { case Row (productId: Int,prediction: Double) => (productId,prediction) }
.collect()
DataFrame dataFrameToPredict可以是一些大??型用户产品DataFrame,例如所有用户x所有产品 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
