ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

大数据综合实战 - 基于大数据的电影推荐系统

大数据综合实战 - 基于大数据的电影推荐系统 大数据综合实战 - 基于大数据的电影推荐系统给计算机大学生送一次福利VM和报告位置通过网盘分享的文件基于大数据的电影推荐系统.zip链接: https://pan.baidu.com/s/1FLPWsSbLkAqZHrUtLCAbgw?pwddg41 提取码: dg41项目概述本项目是一个基于大数据技术栈的电影推荐系统采用协同过滤算法ALS为用户提供个性化电影推荐。项目涵盖了数据预处理、数据存储与管理、数据分析和数据可视化等完整流程。核心技术栈组件版本用途Ubuntu20.04.6 LTS操作系统Hadoop3.3.6分布式存储 (HDFS)Spark3.5.9分布式计算 (MLlib)MySQL8.0.28数据存储Node.js14.21.3Web 服务IntelliJ IDEA-开发环境Scala2.12编程语言实验环境配置虚拟机配置实验在 VMware 虚拟机中完成配置如下配置项值操作系统Ubuntu 20.04.6 LTS网卡ens33静态 IP192.168.227.129/24网关192.168.227.2DNS192.168.227.2 / 223.5.5.5虚拟机文件说明项目包含以下虚拟机相关文件VM/ ├── liufulai.vmdk # 主虚拟机磁盘 ├── liufulai-s001.vmdk ~ liufulai-s013.vmdk # 分片磁盘 ├── liufulai.vmx # 虚拟机配置文件 ├── liufulai.vmxf # 虚拟机扩展配置 ├── liufulai.vmsd # 快照描述文件 ├── liufulai.nvram # BIOS 配置 ├── liufulai.scoreboard # 计分板文件 ├── autoinst.flp # 自动安装软盘镜像 ├── autoinst.iso # 自动安装 ISO 镜像 ├── vmware.log # VMware 日志 └── mksSandbox.log # MKS 沙箱日志系统架构┌─────────────────────────────────────────────────────────────────┐ │ 用户界面层 (Node.js) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 首页 │ │ 登录页 │ │ 评分页 │ │ 推荐页 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 服务层 (Express) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 用户管理 │ │ 评分管理 │ │ 推荐服务 │ │ 电影查询 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 数据处理层 (Spark) │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ ALS 协同过滤推荐算法 │ │ │ │ 训练集 (60%) → 校验集 (20%) → 测试集 (20%) │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 数据存储层 │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ HDFS 存储 │ │ MySQL 存储 │ │ │ │ /input_spark │ │ movierecommend │ │ │ │ - ratings.dat │ │ - movieinfo │ │ │ │ - movies.dat │ │ - user │ │ │ └──────────────────┘ │ - personalratings│ │ │ │ - recommendresult│ │ │ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────┘数据集说明本项目采用 MovieLens 电影评分数据集数据集记录数格式ratings.dat878,415 条用户ID::电影ID::评分::时间戳movies.dat3,423 部电影ID::电影名称::电影类型personalRatings.dat用户自评分用于冷启动推荐MySQL 中的movieinfo表扩充了 50,581 部电影的元数据导演、主演、海报、简介、评分人数等。ETL 流程使用 ETL 脚本完成数据清洗与 HDFS 导入数据清洗去除空行、非法行与重复行校验列数与 ID 合法性上传 HDFS将清洗后的数据上传到/input_spark目录验证使用 HDFS Shell 命令验证数据完整性# ETL 脚本执行./etl/etl_to_hdfs.sh# HDFS 数据验证hdfs dfs-ls/input_spark hdfs dfs-cat/input_spark/ratings.dat|head-5Spark ALS 推荐算法算法原理ALSAlternating Least Squares交替最小二乘法是一种协同过滤推荐算法通过矩阵分解将用户-物品评分矩阵分解为用户特征矩阵和物品特征矩阵的乘积。核心代码objectMovieLensALS{defmain(args:Array[String]):Unit{// 读取 HDFS 数据valratingssc.textFile(hdfs://localhost:9000/input_spark/ratings.dat)// 数据切分训练集(60%) 校验集(20%) 测试集(20%)valArray(train,validation,test)ratings.randomSplit(Array(0.6,0.2,0.2))// ALS 模型训练valmodelALS.train(training,rank,numIter,lambda)// 模型评估 (RMSE)valrmsecomputeRmse(model,validation)// 生成 Top-N 推荐valrecommendationsmodel.recommendProducts(userId,10)// 写入 MySQLsaveToMySQL(recommendations)}}提交运行spark-submit--classrecommend.MovieLensALS\~/bigdata/workspace/spark-recommend/Spark_Recommend.jar\hdfs://localhost:9000/input_spark1100.110参数说明数据目录hdfs://localhost:9000/input_spark用户 ID1隐语义因子个数 rank10正则化参数 lambda0.1迭代次数 numIter10模型评估结果指标值训练集528,926 条校验集174,715 条测试集174,777 条校验集 RMSE0.8834测试集 RMSE0.8819Web 服务设计路由设计路由功能/首页 - 系统概览与使用引导/login登录页/registerpage注册页/recommendtest评分测试页/recommend推荐结果页/search电影库浏览/movie/:id电影详情页/myratings我的评分/tijiao提交评分异步触发 Spark/processing作业进度页数据库设计-- movierecommend 数据库CREATEDATABASEmovierecommend;-- 电影信息表CREATETABLEmovieinfo(idINTPRIMARYKEY,titleVARCHAR(255),genresVARCHAR(255),directorVARCHAR(255),actorsTEXT,posterVARCHAR(500),overviewTEXT,vote_countINT);-- 用户表CREATETABLEuser(idINTPRIMARYKEY,usernameVARCHAR(50),passwordVARCHAR(50));-- 用户评分表CREATETABLEpersonalratings(user_idINT,movie_idINT,ratingFLOAT,timestampBIGINT);-- 推荐结果表CREATETABLErecommendresult(user_idINT,movie_idINT,predictionFLOAT,titleVARCHAR(255));快速开始1. 启动服务# 一键启动 HDFS 和 MySQL./scripts/start_services.sh# 启动 Web 服务nodewebapp/myapp.js2. 访问系统首页http://localhost:3000测试账号test / 1233. 使用流程注册并登录系统在评分测试页对电影进行评分系统异步触发 Spark ALS 推荐作业查看推荐结果页获取个性化推荐问题与解决方案问题解决方案Kettle 6.1 官方下载渠道变更改用等效 ETL 脚本软件版本过老调整为 Hadoop 3.3.6、Spark 3.5.9 等lambda 参数过大导致模型退化经校验集对比选择 lambda0.1跨域图片拦截服务端同源图片代理Spark 作业耗时长异步提交 进度页轮询实验总结本实验完成了基于大数据的电影推荐系统全流程数据存储MovieLens 数据集经 ETL 清洗后导入 HDFS数据分析使用 Scala 编写 Spark ALS 协同过滤程序测试集 RMSE 达到 0.8819结果可视化通过 Node.js 网页完成注册、登录、评分、推荐展示等完整功能通过本次综合实战系统地掌握了 Linux 环境下大数据组件的部署、HDFS 数据管理、Spark MLlib 协同过滤推荐算法、MySQL 数据存储以及 Node.js 动态网页开发。
返回列表