我在 Azure Databricks 中使用 PySpark。我使用 Sparks MLlib 库 ALS 算法来预测电影评级,效果很成功。但是,我正在尝试添加一个数据框,其中包含我对 10 部随机选择的电影的评分。当我这样做时,我只会获得我已经排名的电影的预测排名。
我希望能够使用该模型根据他们的排名获得推荐。
我有执行以下任务的 Spark 代码:
导入数据(RatingsSmall、MoviesSmall、RatingsLarge、Movies Large)
将小评分与小电影合并,将大评分与大电影合并
一起附加到两个新数据集
删除不相关的列时间戳和流派
我现在有一个干净的表,其中包含 MovieID、标题(电影名称)、UserID 和排名。我将从现在开始展示代码。如果您想要之前的代码,那么我也可以提交。
将数据拆分为训练集和测试集(0.80,0.20)
ALS算法
显示预测。
希望上述内容可以帮助您指导我所附的代码。 我只能获得对我已经提交的排名的预测。
我尝试将我的排名加入到训练集中。从这里我想获得数据集中其他电影的推荐或预测。
我的尝试: 导入了一个带有我自己的排名的DF。 将此 (UnionAll) 附加到训练集中。 得到预测(但仅限于我已经排名的电影)
代码:
#Split dataset
training, test = All_Movies.randomSplit([0.8, 0.2])
from pyspark.ml.recommendation import ALS
from pyspark.ml.evaluation import RegressionEvaluator
#Set up model
ALS = ALS(maxIter=10, regParam=0.01, userCol = "userId",itemCol="movieId", ratingCol="rating", coldStartStrategy="drop")
#Fit model to Training set and attach personal recomendations
model = ALS.fit(training.unionAll(PersonalDF)) #PersonalDF is my rankings
#Get Predictions for Test Set
predictions = model.transform(test).dropna()
#All good up until here.
#Trying to get prediction rankings for my movies
mySampledMovies = model.transform(PersonalDF)
mySampledMovies.registerTempTable("mySampledMovies")
display(sqlContext.sql("select userId, movieId, rating,title, prediction from mySampledMovies"))
我期望一个数据框显示我的用户ID、电影ID、排名、预测。对于电影,我还没有看到排名为 N/A 或 Null,并且预测具有价值。
非常感谢
您需要过滤掉您的 user_id 并获取适合您自己的推荐。
a = user.where(user.user_id == 'your user id') model.recommendForUserSubset(a,5).show(1,False)