大数据毕业设计hadoop+spark+hive招聘推荐系统 招聘分析可视化大屏 职位推荐系统 就业推荐系统 招聘爬虫 招聘大数据 计算机毕业设计 机器学习 深度学习 人工智能

本文介绍了使用ApacheMahout构建推荐系统的方法,包括使用JDBCDataModel从MySQL数据库获取数据,以及处理PearsonCorrelationSimilarity和UserNeighborhood进行个性化推荐。同时,文章涉及如何通过Python爬虫抓取拉勾网招聘数据,并讨论了数据仓库建设、数据清洗和可视化面临的挑战及解决方案。
部署运行你感兴趣的模型镜像

核心算法代码分享如下:

package com.university.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mysql.cj.jdbc.MysqlDataSource;
import com.university.demo.dao.RateDao;
import com.university.demo.entity.Rate;
import com.university.demo.service.RateService;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.JDBCDataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class RateServiceImpl extends ServiceImpl<RateDao, Rate> implements RateService {

    @Override
    public void updateRate(Integer uid, Integer iid, Double modifyValue) {
        QueryWrapper<Rate> wrapper = new QueryWrapper<>();
        wrapper.eq("uid", uid).eq("iid", iid);
        List<Rate> rates = baseMapper.selectList(wrapper);
        if(rates == null){
            Rate newRate = new Rate();
            newRate.setUid(uid);
            newRate.setIid(iid);
            newRate.setRate(modifyValue);
            baseMapper.insert(newRate);
        }else{
            Rate oldRate = rates.get(0);
            Double old = oldRate.getRate();
            oldRate.setRate(old + modifyValue);
            baseMapper.updateById(oldRate);
        }
    }

    @Override
    public void setupRate(Integer uid, Integer iid, Double rate) {
        QueryWrapper<Rate> wrapper = new QueryWrapper<>();
        wrapper.eq("uid", uid).eq("iid", iid);
        List<Rate> rates = baseMapper.selectList(wrapper);
        if(rates == null || rates.size()==0){
            Rate newRate = new Rate();
            newRate.setUid(uid);
            newRate.setIid(iid);
            newRate.setRate(rate);
            baseMapper.insert(newRate);
        }else{
            Rate oldRate = rates.get(0);
            oldRate.setRate(rate);
            baseMapper.updateById(oldRate);
        }
    }

    @Override
    public List<RecommendedItem> getRecommendItemIds(Integer userId , Integer howMany) {
        MysqlDataSource datasource = new MysqlDataSource();
        datasource.setUrl("jdbc:mysql://localhost:3396/job?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
//        datasource.setServerName("localhost");
        datasource.setUser("root");
        datasource.setPassword("123456");
//        datasource.setDatabaseName("job");
        JDBCDataModel dataModel = new MySQLJDBCDataModel(datasource, "tb_rate",
                "uid", "iid", "rate", null);

        UserSimilarity similarity;
        try {
            similarity = new PearsonCorrelationSimilarity(dataModel);
            UserNeighborhood neighbourhood = new NearestNUserNeighborhood(2,
                    similarity, dataModel);

            Recommender recommender = new GenericUserBasedRecommender(
                    dataModel, neighbourhood, similarity);
            long start = System.currentTimeMillis();
            List<RecommendedItem> recommendations = recommender.recommend(
                    userId, howMany);
            for (RecommendedItem recommendation : recommendations) {
                System.out.println(recommendation);
            }
            long stop = System.currentTimeMillis();
            System.out.println("Took: " + (stop - start) + " millis");
            return recommendations;
        } catch (TasteException e) {
            e.printStackTrace();
            return new ArrayList<>();
        }
    }
}

学    号

XXX

学生姓名

XXX

届    别

24届

专    业

数据科学与大数据技术

指导教师

姓名及职称

 XXX

毕业设计

(论文)题目

基于Hadoop+Hive的招聘数据仓库的设计与实现

  1. 选题的依据和意义

随着大数据时代的到来,在今天这个高度竞争的经济环境下,之前采用人工进行数据采集,之后进行统一数据分析的工作所带来的效果已经不能满足人们对于职业分析的要求了,现在需要通过一种实时对海量招聘数据进行分析的软件来帮助求职者或相关领域工作人员解决对现有各个行业的疑惑。通过大数据智能分析所取得的成果可以应用与各行各业,社交媒体网站和其他公共服务领域。以一种开放的姿态展现在万千用户面前,这种关于职业招聘数据信息分析之后所取得的理论可以帮用户解决一些切实的问题,例如薪资,公司规模等信息,并且能够切实地帮助用户解决对于求职道路上的一些疑惑。

  1. 国内外有关本选题研究的动态

  在过去,“智能分析”这一技术被应用于商业智能世界,提供理论方法和高效的解决速度,通过迅速、一致和能够交互地访问各种类型的信息透视图来得到对应的结果。与分析的基本理论十分相似,数据挖掘已经实施于商业,从而对大量的数据进行分析。现在最困难的就是怎么获得躲在大数据底层的知识。分析传统的数据存储与各公司的海量数据,我们会得到相比之前不一样的特殊结果,慢慢的智能分析的道路于传统理论分析道路会相差更大。

传统的分析是对已经存在于很久的数据范围进行分析处理。大多数数据存储空间都有一个极为繁琐的提取、转换和加载过程和数据空间限制,这就是说上传到数据空间的分析结果会更加简易易懂。大数据的最为优秀的长处是,除了可以用之前的操作来捕获数据,它还可以对结构复杂的数据进行处理。这也就是在告诉我们大数据所要分析的数据可以是各种各样的。这也会使这项技术实施起来更有难度,但是同时相比于传统方法我们会见到不一样的效果。

传统的分析会依赖于一个已经产生的数据结构体,在这个结构体中,事物与事物之间的大致关系已经存在,并在原有的关系中进行分析。因此,对于大数据分析,一个已经存在已久的世界里,很难找到事物与事物之间的独特关系,因此,在大数据分析中会考虑到图像、视频、运动生成的信息、射频识别等形式的结构化信息。这会使得大数据分析更有远见。

传统的分析方法是按照一定次序进行的,在获得不可缺少的知识理论前,我们必须每天晚上等待提取、加工和装载以及加工工作的完成。大数据分析任何时间任何地点都可以分析的,只需要使用一些特定工具即可。在传统的分析系统中,实时分析是非常麻烦的,费钱费时间,如大型并行处理系统或对称多处理系统。而大数据则是通过一些大数据分析软件进行数据分析,从而获得对应的理论知识。

  1. 论文的基本内容,拟解决的主要问题

内容:

  1. 爬取拉勾网不同类型的招聘信息数据(java、python、大数据、运维、测试等等)作为数据分析的基础数据集;
  2. 搭建Linux数据分析环境,配置hadoop+hive离线数据分析生态圈;
  3. 将数据仓库的理论知识应用于实践,进行数据仓库建模;
  4. 完成数据清洗、数据分析等数仓流程;
  5. 研究FineReport报表技术,进行可视化实现;

拟解决的问题:

  1. 拉勾网人机验证反爬问题,数据获取不全面;
  2. 数据量较大数仓、MySQL数据库查询缓慢问题;
  3. Hadoop/Hive计算数据倾斜问题、JVM内存计算溢出问题;
  4. 可视化指标精度问题;

  1. 研究方法
  1. 项目整体数通过浏览器开发者模式对拉勾网进行浏览器请求分析,将请求cookie取出,放到requests框架开发的爬虫代码中采集拉勾网数据,将爬取到的数据存入MySQL;
  2. 通过sqoop工具将MySQL数据导入到大数据Hadoop平台;
  3. 使用Hive并采用数据仓库建设方法对相关指标进行数据分析,将分析出来的结果再次通过sqoop导出到MySQL供给可视化查询使用;
  4. 最终通过帆软大屏的方式对结果数据进行展示。
  5. 通过调度工具azkaban将整个项目流程串通,一键启动项目即可完成整个数据分析过程。
  6. 同时为了方便查hive数据,还采用了目前主流的数据查询工具hue;

  1. 选题的特色及创新点
  1. Hive+Azkaban离线数仓一键调度处理,省去人工进行数据仓库操作的烦恼;
  2. FineReport一键拖拽可视化大屏工具的应用提高可视化开发效率;
  3. 即使千万真实数据量,通过构建MySQL索引、优化JVM等运维手段做到系统百万千万数据秒查;
  4. Python爬虫模拟人类真实浏览情况采集上千万招聘数据作为数据分析基础数据集,并且数据种类丰富;

学生签名:                                   年     月     日

指导

教师

开题

报告

意见

    指导教师签名:                             年     月     日

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

B站计算机毕业设计大学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值