拉勾网职位分析
数据样式:
1 Java高级 北苑 信息安全,大数据,架构 闲徕互娱 20k-40k 本科 经验5-10年 游戏 不需要融资
字段:
id job addr tag company salary edu exp type level
中文解释
id 工作岗位 地址 标签 公司 薪资 学历 经验 类型 融资级别
1,创建数据库 创建表 测试 create database lagou; create table lagou_job(id int, job string comment "工作岗位", addr string comment "地址", tag string comment "标签", company string comment "公司名", salary string comment "薪资范围", edu string comment "学历要求", exp string comment "经验", type string comment "类型", level string comment "融资级别" ) row format delimited fields terminated by "^"; 数据加载lagou_job load data local inpath "/test_datas/lagou.txt" into table lagou_job; select * from lagou_job limit 10;

需求:
1、求出每个不同地点的招聘数量,输出需求量最大的10个地方,以及岗位需求量
按照 地址进行分组 求count 根据count进行排序 select addr,count(*) count from lagou_job group by addr order by count desc limit 10;

2、求出使用学历和经验作为联合分组条件,那种搭配的需求是最多的
select addr ,exp ,count(*) count from lagou_job group by edu ,exp order by count desc limit 3; 这里求得是前3,只要把3改为1即可

3、求出大数据类工作(job字段包含“大数据”,“hadoop”,“spark”就算大数据类工作)岗位对学历的要求,不同学历的需求量和占比
create table job_edu_exp as select job,edu,exp from lagou_job where job like concat('%',"大数据",'%') union select job,edu,exp from lagou_job where lower(job) like concat('%',"hadoop",'%') union select job,edu,exp from lagou_job where lower(job) like concat('%',"spark",'%'); select * from job_edu_exp limit 10; 根据学历分组求count create table answer_3 as select edu,count(*) nums from job_edu_exp group by edu ; 不限 9 博士 1 大专 13 本科 289 硕士 22 select sum(nums) total_nums from answer_3; create table edu_nums_totalNums as select a.edu edu ,a.nums nums,b.total_nums total_nums from answer_3 a,(select sum(nums) total_nums from answer_3) b; +------+-------+-------------+ | edu | nums | total_nums | +------+-------+-------------+ | 不限 | 9 | 334 | | 博士 | 1 | 334 | | 大专 | 13 | 334 | | 本科 | 289 | 334 | | 硕士 | 22 | 334 | +------+-------+-------------+ select edu ,nums/total_nums fenshu from edu_nums_totalNums ; +------+------------------------+ | edu | fenshu | +------+------------------------+ | 不限 | 0.02694610778443114 | | 博士 | 0.0029940119760479044 | | 大专 | 0.038922155688622756 | | 本科 | 0.8652694610778443 | | 硕士 | 0.0658682634730539 | +------+------------------------+
4、求出不同融资级别的公司,在招聘大数据类工作岗位时,在学历和经验一致的条件下,薪资会高出多少。
本科 1-3年 A轮 10K-20K
本科 1-3年 B轮 12K-25K
.......
本科 3-5年 A轮 15K-25K
本科 3-5年 B轮 16K-30K
.....
研究生 1-3年 A轮 20K-30K
......
(10K-20K) ------ (平均最少薪资-平均最大薪资)
平均薪资 理解为范围之和处以2 即 10k-20k === (10+20)/2 1,首先得出所有总招聘大数据的公司 create table diff_level_company_salary as select id,job,company,salary,edu,exp,level from lagou_job where job like concat('%',"大数据",'%') union select id,job,company,salary,edu,exp,level from lagou_job where lower(job) like concat('%',"hadoop",'%') union select id,job,company,salary,edu,exp,level from lagou_job where lower(job) like concat('%',"spark",'%'); 2,根据学历和经验进行分组 create table defined_salary_groupbyeduExp as select edu,exp,collect_set(level)[0] level,avg(DefineSalary(trim(upper(salary)))) avg_salary from diff_level_company_salary group by edu,exp; 最终结果如下: +-----------------------------------+-----------------------------------+-------------------------------------+------------------------------------------+ | defined_salary_groupbyeduexp.edu | defined_salary_groupbyeduexp.exp | defined_salary_groupbyeduexp.level | defined_salary_groupbyeduexp.avg_salary | +-----------------------------------+-----------------------------------+-------------------------------------+------------------------------------------+ | 不限 | 经验1-3年 | 不需要融资 | 18750.0 | | 不限 | 经验3-5年 | 不需要融资 | 27500.0 | | 不限 | 经验5-10年 | 未融资 | 22500.0 | | 不限 | 经验不限 | 上市公司 | 17333.333333333332 | | 博士 | 经验不限 | B轮 | 20000.0 | | 大专 | 经验1-3年 | C轮 | 19500.0 | | 大专 | 经验3-5年 | 不需要融资 | 23050.0 | | 大专 | 经验5-10年 | A轮 | 37500.0 | | 本科 | 经验1-3年 | 不需要融资 | 22661.764705882353 | | 本科 | 经验10年以上 | A轮 | 48500.0 | | 本科 | 经验1年以下 | 天使轮 | 6000.0 | | 本科 | 经验3-5年 | 上市公司 | 26981.01265822785 | | 本科 | 经验5-10年 | 上市公司 | 33680.555555555555 | | 本科 | 经验不限 | 上市公司 | 21416.666666666668 | | 本科 | 经验应届毕业生 | A轮 | 9791.666666666666 | | 硕士 | 经验1-3年 | 上市公司 | 34375.0 | | 硕士 | 经验3-5年 | 不需要融资 | 33571.42857142857 | | 硕士 | 经验5-10年 | D轮及以上 | 40833.333333333336 | | 硕士 | 经验不限 | 不需要融资 | 16562.5 | | 硕士 | 经验应届毕业生 | A轮 | 7500.0 | +-----------------------------------+-----------------------------------+-------------------------------------+------------------------------------------+
这留有一个自定义UDF import org.apache.hadoop.hive.ql.exec.UDF; public class DefindSalary extends UDF{ public static Double evaluate(String s) { String[] fields = s.split("-"); int left = Integer.parseInt(fields[0].replace("K", "")); int right = Integer.parseInt(fields[1].replace("K", "")); return 1.0 * (left+right)*1000/2; } } 是传入一个字符串根据自己的逻辑进行处理 定义函数实现: 1、创建Java类 2,重写evaluate方法 3,测试,打包上传 4、将jar包导入到Hive的class path add jar xxxx.jar; 5、创建关联到Java类的Hive函数 create temporary function {自己起的方法名} as '类的全限定命名'; 6,测试
5、求出不同标签的公司数量和招聘数量(只输出招聘需求最大的50个标签)
结果样式:
带薪年假 300 500
文化娱乐 200 222
........
使用炸裂函数explode 使得数据分解 create table id_job_company_tag as select a.id id,a.job job,a.company,tags.tg tag from lagou_job a lateral view explode(split(tag,",")) tags as tg; 数据是这样的 +------------------------+-------------------------+-----------------------------+-------------------------+ | id_job_company_tag.id | id_job_company_tag.job | id_job_company_tag.company | id_job_company_tag.tag | +------------------------+-------------------------+-----------------------------+-------------------------+ | 1 | Java高级 | 闲徕互娱 | 信息安全 | | 1 | Java高级 | 闲徕互娱 | 大数据 | | 1 | Java高级 | 闲徕互娱 | 架构 | | 2 | Java开发工程师 | 深圳雁联技术 | 中级 | | 3 | Java开发工程师 | zilliz | 专家 | | 3 | Java开发工程师 | zilliz | 总监 | | 3 | Java开发工程师 | zilliz | 资深 | | 3 | Java开发工程师 | zilliz | 高级 | | 3 | Java开发工程师 | zilliz | C/C++ | | 3 | Java开发工程师 | zilliz | 大数据 | +------------------------+-------------------------+-----------------------------+-------------------------+
然后按照标签进行分组 然后就求得 select tag,count(distinct(company)) company_num,count(*) zhaipin_num from id_job_company_tag group by tag;


浙公网安备 33010602011771号