寒假生活指导20
from pyspark.sql import SparkSession from pyspark.ml.recommendation import ALS # 创建SparkSession spark = SparkSession.builder.appName('RecommendationSystem').getOrCreate() # 假设我们有用户对产品的评分数据,并且已经加载为一个DataFrame data = [ (0, 1, 5.0), (0, 2, 3.0), (1, 1, 4.0), (1, 2, 4.0), (2, 1, 3.0), (2, 2, 4.0), (2, 3, 2.0) ] ratings_df = spark.createDataFrame(data, ["userId", "movieId", "rating"]) # 定义ALS模型参数 als = ALS( userCol="userId", itemCol="movieId", ratingCol="rating", maxIter=5, regParam=0.01, rank=10 ) # 训练模型 model = als.fit(ratings_df) # 预测用户对产品的评分 predictions = model.transform(ratings_df) # 打印预测结果 predictions.show() # 在实际应用中,你可以用模型来为给定的用户生成推荐列表 # 用户ID为0的推荐产品列表 # 获取用户ID为0的前10个推荐产品 # recommendations_for_user_0 = model.recommendForUser(0, 10) # recommendations_for_user_0.show() # 获取对电影ID为1的所有用户的前10个推荐 top_recommendations = model.recommendForAllItems(10) top_users_for_movie_1 = top_recommendations.filter(top_recommendations.movieId == 1) top_users_for_movie_1.show() # 不再需要时,记得停止SparkSession spark.stop()
代码中提供的Spark ALS(交替最小二乘)推荐系统模型训练和预测流程是正确的。然而,在尝试获取对特定电影ID(这里是1)的所有用户的前10个推荐时,直接使用了recommendForAllItems(10)
方法,这会为所有物品生成前10个推荐用户列表。然后过滤出针对电影ID为1的推荐结果。
为了修复并明确实现需求,应该直接针对电影ID为1获取推荐用户列表,而不是先获取所有物品的推荐再进行过滤。以下是修复后的代码:
Python
1# 保持之前的代码不变...
2
3# 获取电影ID为1的前10个推荐用户及其评分
4top_users_for_movie_1 = model.recommendForItem(1, 10) # 更改为 recommendForItem 方法,并传入电影ID 1
5
6# 打印针对电影ID为1的前10个推荐用户信息
7top_users_for_movie_1.show()
8
9# 不再需要时,记得停止SparkSession
10spark.stop()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通