当前位置: 首页 > news >正文

django基于Spark的国漫推荐系统

**详细视频演示请联系博主
项目实现:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
核心代码:
from pyspark.sql import SparkSession
from pyspark.ml.recommendation import ALS
from pyspark.ml.evaluation import RegressionEvaluator
from pyspark.sql.functions import col

class ComicRecommender:
def init(self):
self.spark = SparkSession.builder
.appName(“ComicRecommendation”)
.config(“spark.executor.memory”, “4g”)
.getOrCreate()

    # 加载数据self.ratings = self.spark.read.csv("data/user_ratings.csv", header=True, inferSchema=True)self.comics = self.spark.read.csv("data/comic_info.csv",header=True,inferSchema=True)def preprocess(self):"""数据预处理"""# 过滤无效评分self.ratings = self.ratings.filter((col("rating") >= 1) & (col("rating") <= 5))# 处理冷启动问题:添加默认评分popular_comics = self.ratings.groupBy("comic_id").count()avg_rating = self.ratings.groupBy().avg("rating").first()[0]default_ratings = popular_comics.filter(col("count") > 100) \.limit(100) \.withColumn("user_id", lit(0)) \.withColumn("rating", lit(avg_rating))self.ratings = self.ratings.union(default_ratings)def train_model(self):"""训练ALS模型"""# 划分训练集/测试集train, test = self.ratings.randomSplit([0.8, 0.2])# 配置ALS模型als = ALS(maxIter=10,regParam=0.01,userCol="user_id",itemCol="comic_id",ratingCol="rating",coldStartStrategy="drop")# 训练模型self.model = als.fit(train)# 评估模型predictions = self.model.transform(test)evaluator = RegressionEvaluator(metricName="rmse", labelCol="rating",predictionCol="prediction")rmse = evaluator.evaluate(predictions)print(f"模型RMSE: {rmse}")return self.modeldef generate_recommendations(self, user_id, num_recs=10):"""为用户生成推荐"""# 创建用户DFuser_df = self.spark.createDataFrame([(user_id,)], ["user_id"])# 获取推荐recs = self.model.recommendForUserSubset(user_df, num_recs)# 提取推荐结果rec_list = recs.select("recommendations").first()[0]# 关联漫画信息comic_ids = [row.comic_id for row in rec_list]comic_recs = self.comics.filter(col("id").isin(comic_ids))return comic_recs.toPandas().to_dict(orient="records")def update_model(self, new_ratings):"""增量更新模型"""# 将新评分添加到数据集new_df = self.spark.createDataFrame(new_ratings)self.ratings = self.ratings.union(new_df)# 重新训练模型self.train_model()

相关文章:

  • Early End是什么
  • Cesium快速入门到精通系列教程十:实现任意多个蜂巢似六边形组合
  • 数据结构----排序(3)
  • 接口联调阶段的移动端调试实践:从实际问题到流程协同(含WebDebugX)
  • MySQL 默认连接数
  • 在 HTTP 请求返回的状态码不为 200 时,重新发送请求
  • 数据库系统概论(十九)详细讲解关系查询处理与查询优化
  • 设计模式-依赖倒置原则(Dependency Inversion Principle, DIP)
  • Spring Boot(九十一):Spring Boot实现防盗链功能
  • WPS 和 office (word/excel/ppt) 找到模板所在位置以及更改模板的方式(公文写作格式要求、字体安装、模板下载)
  • Maven高级学习笔记
  • 常见哈希格式类型及其在CTF与渗透测试中的爆破与伪造策略(PBKDF2、bcrypt...)
  • Spring Boot分布式锁深度优化:彻底解决达梦数据库高并发死锁问题
  • 【C++11】智能指针——unique_ptr, shared_ptr和weak_ptr
  • DBeaver数据库管理工具的简介、下载安装与优化配置
  • 【Dify精讲】第10章:会话管理与上下文保持【知识卡片】
  • Nginx入门篇
  • 【计算机网络】:get与post
  • 基于协同过滤的新高考志愿个性化智能推荐系统前后端讲解
  • 座舱监控系统(In-Cabin Monitoring System,IMS)相关知识
  • 公司网站建设 阜阳/哪有恶意点击软件买的
  • 怎么做网站弄网盟/网站维护的主要内容
  • 做旅游网站需要引进哪些技术人才/好看的网页设计作品
  • 郑州膏药网站建设/武汉网站运营专业乐云seo
  • c2c网站类型/快速优化网站排名的方法
  • 南宁网站建设费用/网站提交入口