赞
踩
大数据价值链中最重要的一个环节就是数据分析,其目标是提取数据中隐藏的数据,提供有意义的建议以辅助制定正确的决策。通过数据分析,人们可以从杂乱无章的数据中萃取和提炼有价值的信息,进而找出研究对象的内在规律。
数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,从行业角度看,数据分析是基于某种行业目的,有目的的进行收集、整理、加工和分析数据的过程,通过提取有用信息,从而形成相关结论,这一过程也是质量管理体系的支持过程。数据分析的作用包含推测或解释数据并确定如何使用数据、检查数据是否合法、为决策提供参考建议、诊断或推断错误原因以及预测未来等作用。
数据分析的方法主要分为单纯的数据加工方法、基于数理统计的数据分析、基于数据挖掘的数据分析以及基于大数据的数据分析。其中,单纯的数据加工方法包含描述性统计分析和相关分析;基于数理统计的数据分析包含方差、因子以及回归分析等;基于数据挖掘的数据分析包含聚类、分类和关联规则分析等;基于大数据的数据分析包含使用Hadoop、Spark和Hive等进行数据分析。
我们通过使用基于分布式文件系统的Hive对某招聘网站的数据进行分析。
Hive是建立在Hadoop分布式文件系统上的数据仓库,它提供了一系列工具,能够对存储在HDFS中的数据进行数据提取、转换和加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的工具。Hive可以将HQL语句转为MapReduce程序进行处理。
针对招聘网站的职位数据分析项目,我们将Hive数据仓库设计为星状模型,星状模型是由一张事实表和多张维度表组成。
事实表 ods_jobdata_origin
主要用于存储 MapReduce
计算框架清洗后的数据,其表结构如下。
维度表 t_salary_detail
主要用于存储薪资分布分析的数据,其表结构如下。
维度表 t_company_detail
主要用于存储福利标签分析的数据,其表结构如下。
维度表 t_city_detail
的表结构主要用于存储城市分布分析的数据,其表结构如下。
维度表 t_kill_detail
的表结构主要用于存储技能标签分析的数据,其表结构如下。
创建名为“jobdata
”的数据仓库,并通过use指令切换到创建的数据库,命令如下。
hive (default)> create database jobdata;
hive (default)> use jobdata;
创建存储原始职位数据的事实表 ods_jobdata_origin
,命令如下。
create table ods_jobdata_origin(
city string comment '城市',
salary array<string> comment '薪资',
company array<string> comment '福利',
kill array<string> comment '技能'
)comment '原始数据表'
row format delimited
fields terminated by ','
collection items terminated by '-';
将 HDFS
上的预处理数据导入到事实表 ods_jobdata_origin
中,命令如下:
hive (jobdata)> load data inpath '/lagou/output/part-r-00000' overwrite into table ods_jobdata_origin;
通过 select
语句查看表数据内容,验证数据是否导入成功,命令如下:
hive (jobdata)> select * from ods_jobdata_origin;
OK
ods_jobdata_origin.city ods_jobdata_origin.salary ods_jobdata_origin.company ods_jobdata_origin.kill
上海 ["10","13"] [] ["Oracle","SQL","hive","Cognos"]
上海 ["10","15"] ["带薪年假","岗位晋升","领导好","五险一金"] ["数据仓库","Hadoop","Spark","Hive"]
上海 ["10","18"] [] ["Spark"]
上海 ["10","18"] ["绩效奖金","五险一金","带薪年假","年度旅游"] ["Hadoop","Spark"]
上海 ["10","20"] ["通讯津贴","交通补助","双休","弹性工作"] ["自动化测试","系统软件测试","CDP"]
上海 ["12","18"] ["股票期权","绩效奖金","专项奖金","年底双薪"] ["数据仓库","Hadoop","MySQL"]
上海 ["12","20"] ["节日礼物","年底双薪","专项奖金","带薪年假"] ["DBA","数据仓库","MySQL","SQLServer"]
上海 ["12","20"] ["节日礼物","年底双薪","专项奖金","带薪年假"] ["数据仓库","DBA"]
根据最低薪资进行分区分组统计,并保存到
t_salary_detail
表中。
create table t_salary_detail(
salary string comment '薪资分布区间',
count int comment '区间内出现薪资的频次'
)comment '薪资分布详情表'
row format delimited fields terminated by ',';
insert overwrite table t_salary_detail select sal,count(1) from (select case when salary[0] >=0 and salary[0]<=5 then '0-5' when salary[0] >=6 and salary[0]<=10 then '6-10' when salary[0] >=11 and salary[0]<=15 then '11-15' when salary[0] >=16 and salary[0]<=20 then '16-20' when salary[0] >=21 and salary[0]<=25 then '20-25' when salary[0] >=26 and salary[0]<=30 then '26-30' when salary[0] >=31 and salary[0]<=35 then '31-35' when salary[0] >=36 and salary[0]<=40 then '36-40' when salary[0] >=41 then '41+' end as sal from ods_jobdata_origin ) as t_sal group by sal;
hive (jobdata)> select * from t_salary_detail;
OK
t_salary_detail.salary t_salary_detail.count
0-5 4
11-15 178
16-20 104
20-25 51
26-30 36
31-35 8
36-40 3
6-10 66
Time taken: 9.577 seconds, Fetched: 8 row(s)
通过观察分析结果,可以了解到全国大数据相关职位的月薪资分布主要集中在11k-20k之间,其中出现频次最高的月薪资区间在11k-15k。
create table t_city_detail(
city string comment '城市',
count int comment '城市频次'
)comment '城市岗位统计详情表'
row format delimited fields terminated by ',';
hive (jobdata)> insert overwrite table t_city_detail select city,count(1) from ods_jobdata_origin group by city;
hive (jobdata)> select * from t_city_detail; OK t_city_detail.city t_city_detail.count 上海 91 佛山 4 北京 145 南京 2 南昌 1 合肥 3 天津 1 宁波 1 广州 50 成都 19 无锡 1 杭州 33 柳州 1 武汉 14 江门 1 济南 1 深圳 68 福州 1 苏州 2 西安 3 郑州 2 长沙 5 青岛 1 Time taken: 8.349 seconds, Fetched: 23 row(s)
大数据职位的需求主要集中在大城市,其中最多的是北京,其次分别是上海和深圳,一线城市(北上广深)占据前几名的位置,然而杭州这座城市对大数据职位的需求也很高,超越广州,次于深圳,阿里巴巴这个互联网巨头应该起到不小的带领作用。
create table t_company_detail(
company string comment '福利标签',
count int comment '福利标签频次'
)comment '福利标签统计详情表'
row format delimited fields terminated by ',';
insert overwrite table t_company_detail
select company,count(1) from
(select explode(company) as company from ods_jobdata_origin) as t_company
group by company;
hive (jobdata)> select * from t_company_detail where count>2; OK t_company_detail.company t_company_detail.count SaaS 4 专项奖金 36 两房一厅公寓 3 五险一金 85 交通补助 26 免费两餐 6 免费班车 25 六险一金 44 加班费 3 午餐补助 26 博士后工作站 3 双休 7 外企氛围 3 大牛云集 3 安居计划 4 完成E轮融资 3 定期体检 78 就近租房补贴 33 岗位晋升 50 带薪年假 158 年底双薪 68 年度旅游 31 年终分红 17 年终奖金 3 弹性工作 68 成长空间 3 扁平化管理 6 扁平管理 67 技能培训 62 极客氛围 3 福利产假 4 管理规范 12 绩效奖金 128 美女多 11 股票期权 59 节日礼物 63 通讯津贴 23 领导好 27 餐补 4 Time taken: 10.092 seconds, Fetched: 39 row(s)
通过观察福利标签的分析数据,可以看到公司对员工的福利政策都有哪些,出现频次较多的福利标签可以视为大多数公司对员工的标准,在选择入职公司时可作为一个参考。
create table t_kill_detail(
city string comment '技能标签',
count int comment '技能标签频次'
)comment '技能标签统计详情表'
row format delimited fields terminated by ',';
insert overwrite table t_kill_detail
select kill,count(1) from
(select explode(kill) as kill from ods_jobdata_origin) as t_kill
group by kill;
hive (jobdata)> select * from t_kill_detail where count>2; OK t_kill_detail.company t_kill_detail.count DBA 3 ETL 67 Flink 56 Hadoop 179 Hive 68 Java 55 Linux 4 MongoDB 10 MySQL 30 Oracle 7 Python 22 SQL 5 SQLServer 3 Scala 27 Spark 132 Storm 13 hbase 7 hive 4 java 4 python 4 sql 3 大数据 6 大数据开发 3 数仓工程师 17 数仓建模 42 数仓架构 32 数据仓库 106 数据分析 9 数据处理 3 数据库 4 数据库开发 19 数据挖掘 25 数据架构 13 架构师 4 测试 4 系统架构 3 Time taken: 8.469 seconds, Fetched: 36 row(s)
通过观察技能标签的分析数据,看到要从事大数据相关工作需要掌握哪些技能,这些需要掌握的技能前三名的占比达38%(前三名技能出现频次的总和/所有技能出现频次的总和),也就是说超过1/3的公司会要求大数据工作者需要掌握Hadoop、Spark和数据仓库这三项技能,对于想要从事这方面工作的读者,可以作为学习的参考与准备。
下一章 使用SSM进行数据操作,转换为Web数据方便ECharts数据呈现
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。