毕业设计项目:PySpark 大数据处理 + Flask Web 服务 + ECharts 数据可视化
本系统对视频平台的视频信息、用户行为数据进行采集、存储与 Spark 分析,并通过 Web 仪表板进行多维度可视化展示。采用高度仿真的模拟数据进行功能验证,数据分布符合真实场景特征。
- 视频数据分析:分类统计、热门/高分视频、上映趋势、导演/演员排行
- 用户行为分析:用户画像、活跃度、地域分布、完播率、观看时段、设备类型
- 推荐算法:相似视频、分类推荐、热门推荐(规则 + 可扩展 MLlib)
- 数据可视化:仪表板、玫瑰图、柱状图、折线图、热力图、雷达图
- RESTful API:完整后端接口,内存缓存,MySQL 与 JSON 双数据源
- UI 优化:深色渐变、毛玻璃卡片、数字滚动动画、图表工具栏
| 层级 | 技术 |
|---|---|
| 前端 | Bootstrap 5、ECharts 5、原生 JS |
| 后端 | Flask、Flask-CORS |
| 数据处理 | PySpark(Spark SQL + DataFrame) |
| 数据库 | MySQL 8.0 |
| 其他 | jieba、pandas、pymysql |
系统采用分层架构:展示层 → 服务层 → 处理层 → 数据层。详细架构图、数据流程与 Spark 任务流程见 docs/架构图.md。
- Python 3.8+
- MySQL 8.0+
- Java 8+(Spark 依赖)
# 1. 安装依赖(建议使用虚拟环境)
pip install -r requirements.txt
# 2. 初始化数据库并导入数据
mysql -u root -p < data/init_database.sql
python data/generate_mock_data.py
python data/import_data.py
# 3. 运行 Spark 分析(生成图表数据)
python run_spark_jobs.py
# 4. 启动 Web 服务(默认 5000,若占用可用 FLASK_PORT=5001)
python app.py访问:**http://localhost:5000**(或你设置的端口)
更详细的安装与配置见 INSTALL.md。
| 页面 | 路径 | 说明 |
|---|---|---|
| 仪表板 | / |
概览卡片、分类分布、热门视频、趋势、地域、时段热力图 |
| 用户分析 | /user/analysis |
用户画像、完播率、设备、周末对比等 |
| 视频详情 | /video/detail?id=1 |
视频信息、统计、推荐列表、行为样本 |
- 仪表板数据每 30 秒自动刷新,顶部会显示“数据已更新”时间。
- 点击「热门视频 Top 10」柱状图可跳转对应视频详情。
完整操作说明见 docs/user_manual.md。
详见 API.md。主要接口包括:/api/overview、/api/video/category_stats、/api/video/top_videos、/api/video/trend、/api/user/region_distribution、/api/user/behavior_stats、/api/video/detail、/api/recommendation 等。
├── app/ # Flask 应用模块
├── spark_jobs/ # Spark 数据处理
│ ├── spark_analyzer.py # 基础分析
│ ├── user_behavior_analyzer.py
│ └── recommendation.py
├── data/ # 数据与 SQL
│ ├── init_database.sql
│ ├── generate_mock_data.py
│ ├── import_data.py
│ └── analysis_results/ # Spark 输出 JSON
├── static/js/ # 前端脚本
├── templates/ # HTML 模板
├── config/ # 配置
├── utils/ # 工具(db_helper、logger)
├── tests/ # 测试
├── docs/ # 文档(架构图、手册等)
├── app.py # Flask 主应用
├── config.py # 全局配置
├── run_spark_jobs.py # Spark 任务一键执行
├── run_all.py # 一键启动(可选跳过数据/Spark)
└── requirements.txt
Q: Spark 运行很慢?
A: 可减少模拟数据量,或调整 config.py 中 SPARK_CONFIG 的并行度与内存。
Q: MySQL 连接失败?
A: 确认 MySQL 已启动,并检查 config.py 中 MYSQL_CONFIG(host、port、user、password、database)。
Q: 前端图表为空或报错?
A: 先执行 python run_spark_jobs.py 生成 data/analysis_results/ 下的 JSON;并确认 /api/overview、/api/video/category_stats 等接口返回正常。
Q: 端口 5000 被占用?
A: 使用 env FLASK_PORT=5001 python app.py 或修改 config.py 中 FLASK_CONFIG['PORT']。
- 测试:
pytest tests/ - 日志:
logs/目录 - 配置:支持环境变量覆盖(如
MYSQL_PASSWORD、FLASK_PORT)
MIT License