基于Spark协同过滤算法的推荐系统的设计与实现

基于Spark协同过滤算法的推荐系统的设计与实现[已开源]

一、架构

1.1 总架构

在这里插入图片描述

1.2、数仓架构

在这里插入图片描述

4.3 功能设计

在这里插入图片描述

4.4 ER图

在这里插入图片描述

4.5 系统流程图

在这里插入图片描述

三、推荐系统展示

https://www.fiang.fun

3.1用户界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2管理员后台界面

在这里插入图片描述
在这里插入图片描述
四、项目部署

4.1 docker-compose部署(暂时不能用,有懂的可以帮忙完善)

# docker build
cd 项目目录/
docker build -f ./docker_env/django/DockerfileBuild -t django_docker_img:v1 .
# 镜像保存
docker save -o django_docker_img.tar django_docker_img:v1

# docker build
# 进项目目录
cd project/
docker build -f ./docker_env/web/DockerfileBuild -t vue_web_img:v1 .
# 镜像保存
docker save -o vue_web_img.tar vue_web_img:v1
# 加载离线镜像
docker load -i django_docker_img.tar
docker load -i vue_web_img.tar
 
 
# docker-compose 创建并启动相应服务
cd 项目目录/
docker-compose up -d

4.2 环境初始化

4.2.1 快捷脚本(Windows)
  • 下载Anaconda
  • 运行env-init.bat
  • 注意控制台信息,需要输入两个y
4.2.2 正常流程
  • 下载Anaconda

  • 创建虚拟环境

    • 爬虫环境
    conda create -n jobfreeSpider python=3.8
    
    pip install -r .\spiderProject\requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
    
    • Web环境
    conda create -n jobfree python=3.8
    
    pip install -r .\web-server\requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
    
  • 下载MySQL和Redis数据库

4.3 项目启动

4.3.1 爬虫程序
windows一键启动

双击spder-start.bat

正常启动
  • 切换至 jobfreeSpider环境

    conda activate jobfreeSpider
    
  • 启动scrapyd进程

    scrapyd
    # 控制台输入
    # windows输入 scrapyd 后收后台挂起,新建cmd执行后续
    # Linux输入nohup scrapyd > scrapyd.log & + ctrl+D挂起
    
  • 启动Gerapy

    gerapy runserver 0.0.0.0:5000
    # 控制台输入
    # windows输入 gerapy runserver 0.0.0.0:5000 后收后台挂起
    # Linux输入nohup gerapy runserver 0.0.0.0:5000 > gerapy.log & + ctrl+D挂起
    
  • 浏览器打开http://127.0.0.1进入Gerapy,用户名密码admin/admin

  • 点击项目管理-编辑

    在这里插入图片描述

  • 找到settings.py,修改redis和mysql为自己的配置,不用建表,自动建

    在这里插入图片描述

  • 修改完不用保存(自动保存),点击项目管理-部署

    在这里插入图片描述

  • 点击重新打包后,再点击部署即可(如果报错99%是你的数据库配置有问题,因为部署时会执行检查代码,连接不上就报错)

    在这里插入图片描述

  • 如果部署失败,查看scrapyd进程/日志

5.3.2 Web程序
配置settings.py
# web-server\DRF\settings.py
# SMTP邮箱设置,怎么申请请自行网上学习
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = ''  # 邮箱SMTP服务器地址
EMAIL_HOST_USER = ''  # 邮箱用户名
EMAIL_HOST_PASSWORD = ''  # 邮箱密码
# EMAIL_USE_TLS = True  # 使用TLS加密
DEFAULT_FROM_EMAIL = ''  # 默认发件人邮箱
#redis
REDIS_HOST='127.0.0.1'
REDIS_PORT=6379
REDIS_PSW=''
REDIS_DB=1
#MySQL
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'jobfree',  
        'USER': 'root',  
        'PASSWORD': 'root',  
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'OPTIONS': {'charset': 'utf8mb4'},
    },

}
迁移数据库
conda activate jobfree
cd web-server
python manage.py migrate
导入测试数据

ETL\test_data.sql,然后完成ETL模块再进行下一步运行

windows一键启动

双击web-start.bat

正常启动
cd web-server
conda activate jobfree
python manage.py runserver
5.3.3 ETL模块
环境搭建

有集群则跳过

Windows下使用hadoop+hive+sparkSQL-CSDN博客

初始化hive数据库

ETL\init.sql

安装python库
pip install findspark
执行ETL脚本

ETL\xxx目录下的py文件

模型训练

model\ALS.py

开源地址

https://github.com/854771076/Employment_referral

JavaSpark推荐算法是一种基于Spark平台的推荐算法,它可以用于处理大规模数据集。下面是一个简单的JavaSpark推荐算法的例子: ```java // 导入必要的类 import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.mllib.recommendation.ALS; import org.apache.spark.mllib.recommendation.MatrixFactorizationModel; import org.apache.spark.mllib.recommendation.Rating; public class JavaRecommendationExample { public static void main(String[] args) { // 创建SparkConf对象 SparkConf conf = new SparkConf().setAppName("JavaRecommendationExample").setMaster("local"); // 创建JavaSparkContext对象 JavaSparkContext jsc = new JavaSparkContext(conf); // 加载数据 String path = "data/mllib/als/test.data"; JavaRDD<String> data = jsc.textFile(path); // 将数据转换为Rating对象 JavaRDD<Rating> ratings = data.map(s -> { String[] sarray = s.split(","); return new Rating(Integer.parseInt(sarray[0]), Integer.parseInt(sarray[1]), Double.parseDouble(sarray[2])); }); // 使用ALS算法训练模型 int rank = 10; int numIterations = 10; MatrixFactorizationModel model = ALS.train(JavaRDD.toRDD(ratings), rank, numIterations, 0.01); // 为用户推荐电影 JavaRDD<Rating> userRecs = model.recommendProducts(1, 5); // 输出推荐结果 for (Rating r : userRecs.collect()) { System.out.println(r.product() + " rating " + r.rating()); } // 关闭JavaSparkContext对象 jsc.stop(); } } ``` 该例子使用ALS算法训练模型,并为用户1推荐5部电影。你可以根据自己的需求修改rank和numIterations参数来优化模型的性能。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

awsless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值