协同过滤 spark python

Posted

技术标签:

【中文标题】协同过滤 spark python【英文标题】:Collaborative filtering spark python 【发布时间】:2020-06-08 21:00:17 【问题描述】:

我正在尝试仅将 10 行数据框保存到 json。但他保存的不是 10 行。

userRecs = model.recommendForAllUsers(10)

这个节目10然后我保存:
userRecs.coalesce(1).write.mode('overwrite').json("gs://imdbcc1/ML/userrecs")

但它给了我 200 000 条记录。我只想存10个

(training, test) = ratings.randomSplit([0.8, 0.2])
als = ALS(maxIter=10, regParam=1, userCol="user_id", itemCol="tconst", ratingCol="rating", coldStartStrategy="drop")
model = als.fit(training)
#Evaluate the model by computing the RMSE on the test data
predictions = model.transform(test)
evaluator = RegressionEvaluator(metricName="rmse", labelCol="rating", predictionCol="prediction")
rmse = evaluator.evaluate(predictions)
print("Root-mean-square error = " + str(rmse))
#Generate top 10 movie recommendations for each user
userRecs = model.recommendForAllUsers(10)
userRecs.coalesce(1).write.mode('overwrite').json("gs://imdbcc1/ML/userrecs")

【问题讨论】:

您应该使用代码块以获得更好的可读性,并从问题本身中删除这段代码。只有代码块应该包含您想要共享的代码,否则它会让您的问题难以阅读。 【参考方案1】:
#Generate top 10 movie recommendations for each user
userRecs = model.recommendForAllUsers(10)

表示对于所有用户,您获得了前 10 部电影推荐。但所有记录都会附有前 10 部电影推荐。

你必须在coalese之前为10个用户使用limit(10)(在数据上排名前10的电影推荐)

喜欢这个

userRecs.limit(10).coalesce(1).write.mode('overwrite').json("gs://imdbcc1/ML/userrecs")

【讨论】:

以上是关于协同过滤 spark python的主要内容,如果未能解决你的问题,请参考以下文章

利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客

spark协同过滤算法-附scala代码

spark基于用户的协同过滤算法与坑点,提交job

创建项目并初始化业务数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客

基于Spark MLlib平台的协同过滤算法---电影推荐系统

Spark机器学习(11):协同过滤算法