Spark SQL入门案例之人力资源系统数据处理

  

  通过该案例,给出一个比较完整的、复杂的数据处理案例,同时给出案例的详细解析。

      人力资源系统的管理内容组织结构图

1) 人力资源系统的数据库与表的构建。

2) 人力资源系统的数据的加载。

3) 人力资源系统的数据的查询。

职工基本信息

职工姓名,职工id,职工性别,职工年龄,入职年份,职位,所在部门id

Michael,1,male,37,2001,developer,2
Andy,2,female,33,2003,manager,1
Justin,3,female,23,2013,recruitingspecialist,3
John,4,male,22,2014,developer,2
Herry,5,male,27,2010,developer,1
Brewster,6,male,37,2001,manager,2
Brice,7,female,30,2003,manager,3
Justin,8,male,23,2013,recruitingspecialist,3
John,9,male,22,2014,developer,1
Herry,10,female,27,2010,recruitingspecialist,3

部门基本信息

部门名称,编号,数据内容

management,1
researchanddevelopment,2
HumanResources,3

职工考勤信息

职工id,年,月信息,职工加班,迟到,旷工,早退小时数信息

1,2015,12,0,2,4,0
2,2015,8,5,0,5,3
3,2015,3,16,4,1,5
4,2015,3,0,0,0,0
5,2015,3,0,3,0,0
6,2015,3,32,0,0,0
7,2015,3,0,16,3,32
8,2015,19,36,0,0,0,3
9,2015,5,6,30,0,2,2
10,2015,10,6,56,40,0,32
1,2014,12,0,2,4,0
2,2014,38,5,40,5,3
3,2014,23,16,24,1,5
4,2014,23,0,20,0,0
5,2014,3,0,3,20,0
6,2014,23,32,0,0,0
7,2014,43,0,16,3,32
8,2014,49,36,0,20,0,3
9,2014,45,6,30,0,22,2
10,2014,40,6,56,40,0,22

职工工资清单

职工id,工资

1,5000
2,10000
3,6000
4,7000
5,5000
6,11000
7,12000
8,5500
9,6500
10,4500

人力资源系统的数据库与表的构建

  将人力资源系统的数据加载到Hive仓库的HRS数据中,并对人力资源系统的数据分别建表。

1、启动spark-shell

  bin/spark-shell --executor-memory 2g --driver-memory 1g --master spark://spark01:7077

  其中,spark01为当前Spark集群的master节点。

  由于,当前使用Hive作为数据仓库,至于如何安装与配置,不多赘述,很简单,进行hive-site.xml文件配置并启动了metastore服务等准备操作。

  

  除去多余的日志信息:

  scala > import org.apache.log4j.{Level,Logger}

  scala > Logger.getLogger("org.apache.spark").setLevel(Level.WARN)

  scala > Logger.getLogger("org.apache.spark,sql").setLevel(Level.WARN)
  scala > Logger.getLogger("org.apache.hadoop.hive.ql").setLevel(Level.WARN)
  以应用程序方式提交时,可以在配置文件conf/log4j.properties中设置日志等级,如下

  log4j.logger.org.apache.spark = WARN

  log4j.logger.org.apache.spark.sql= WARN

  log4j.logger.org.apache.hadoop.hive.ql = WARN

2、构建与使用HRS数据库

  1)使用CREATE DATABASE语句创建,名为HRS的数据库,存放人力资源系统里的所有数据。

  scala > sqlContext.sql("CREATE DATABASE HRS")

  2)使用人力资源系统的数据库HRS

  scala > sqlContext.sql("USE HRS")

 

3、数据建表

  1) 构建职工基本信息表people

  scala > sqlContext.sql("CREATE TABLE IF NOT EXISTS people(

      name STRING,

      id INT,  

      gender STRING,

      age INT,

      year INT,

      position STRING,

      depID INT

      )

      ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘ LINES TERMINATED BY ‘\n‘")

  2)构建部门基本信息表department

  scala > sqlContext.sql("CREATE TABLE IF NOT EXISTS department(

      name STRING,

      depID INT,  

      )

      ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘ LINES TERMINATED BY ‘\n‘")

  3) 构建职工考勤信息表attendance

   scala > sqlContext.sql("CREATE TABLE IF NOT EXISTS attendance(

      id INT,

      year INT,

      month INT,

      overtime INT,

      latetime INT,

      absenteeism INT,

      leaveearlytime INT, 

      )

      ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘ LINES TERMINATED BY ‘\n‘")

  4) 构建职工工资清单表salary

   scala > sqlContext.sql("CREATE TABLE IF NOT EXISTS attendance(

      id INT,

      salary INT, 

      )

      ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘ LINES TERMINATED BY ‘\n‘")

人力资源系统的数据的加载

  分别将本地这4个文件的数据加载到四个表

  1)职工基本信息表的加载数据操作

  scala > sqlContext.sql("LOAD DATA LOCAl INPATH ‘/usr/local/data/people.txt‘ OVERWRITE INTO TABLE people")

  其中,OVERWRITE 表示覆盖当前表的数据,即先清除表数据,再将数据insert到表中。

  2)部门基本信息表的加载数据操作

  scala > sqlContext.sql("LOAD DATA LOCAl INPATH ‘/usr/local/data/department.txt‘ OVERWRITE INTO TABLE department")

  3)职工考勤基本信息表的加载数据操作

  scala > sqlContext.sql("LOAD DATA LOCAl INPATH ‘/usr/local/data/attendance.txt‘ OVERWRITE INTO TABLE attendance")

  4)职工工资基本信息表的加载数据操作

  scala > sqlContext.sql("LOAD DATA LOCAl INPATH ‘/usr/local/data/salary.txt‘ OVERWRITE INTO TABLE salary")

人力资源系统的数据的加载

  人力资源系统的数据常见的查询操作有部门职工数的查询、部门职工的薪资topN的查询、部门职工平均工资的排名、各部门每年职工薪资的总数查询等。

  查看各表的信息,同时查看界面回显中的schema信息

  scala > sqlContext.sql("SELECT * FROM people)

  scala > sqlContext.sql("SELECT * FROM department)

  scala > sqlContext.sql("SELECT * FROM attendance)

  scala > sqlContext.sql("SELECT * FROM salary)

  1、部门职工数的查询

  首先将people表数据与department表数据进行join操作,然后根据department的部门名进行分组,分组后针对people中唯一标识一个职工的id字段进行统计,最后得到各个部门对应的职工总数统计信息。

  scala > sqlContext.sql("SELECT b.name,count(a.id) FROM people a JOIN department b on a.depid = b.depid GROUP BY  b.name").show

  

  2、对各个部门职工薪资的总数、平均值的排序

  首先根据部门id将people表数据与department表数据进行join操作,根据职工id join salary表数据,然后根据department的部门名进行分组,分组后针对职工的薪资进行求和或求平均值,并根据该值大小进行排序。(默认排序为从小到大)

  scala > sqlContext.sql("SELECT b.name,sum(c.salary) AS s FROM people a JOIN department b on a.depid = b.depid JOIN salary c ON a.id = c.id GROUP BY b.name ORDER BY s").show

  

  

时间: 2024-10-10 21:20:58

Spark SQL入门案例之人力资源系统数据处理的相关文章

10.spark sql之快速入门

前世今生 Hive&Shark ??随着大数据时代的来临,Hadoop风靡一时.为了使熟悉RDBMS但又不理解MapReduce的技术人员快速进行大数据开发,Hive应运而生.Hive是当时唯一运行在Hadoop上的SQL-on-Hadoop工具. ??但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低的运行效率.为了提高SQL-on-Hadoop的效率,大量的SQL-on-Hadoop工具开始产生,其中表现较为突出的是: MapR的Drill Cloudera的Im

(升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课程会涵盖Scala编程详解.Spark核心编程.Spark SQL和Spark Streaming.Spark内核以及源码剖析.性能调优.企业级案例实战等部分.完全从零起步,让学员可以一站式精通Spark企业级大数据开发,提升自己的职场竞争力,实现更好的升职或者跳槽,或者从j2ee等传统软件开发工程

Spark视频第5期:Spark SQL架构和案例深入实战

Spark SQL架构和案例深入实战 视频地址:http://pan.baidu.com/share/link?shareid=3629554384&uk=4013289088&fid=977951266414309 王家林老师(邮箱:[email protected] QQ: 1740415547) Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者. 在Spark.Hadoop.Android等方面有丰富的源码.实务和性能优化经验.彻底研究了Spark从

spark结构化数据处理:Spark SQL、DataFrame和Dataset

本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但因Spark发展迅速(本文的写作时值Spark 1.6.2发布之际,并且Spark 2.0的预览版本也已发布许久),因此请随时关注Spark SQL官方文档以了解最新信息. 文中使用Scala对Spark SQL进行讲解,并且代码大多都能在spark-shell中运行,关于这点请知晓. 概述 相比于

spark视频-Spark SQL架构和案例深入实战

Spark亚太研究院决胜大数据时代公益大讲坛第五期:Spark SQL架构和案例深入实战,视频地址:http://pan.baidu.com/share/link?shareid=3629554384&uk=4013289088&fid=977951266414309 王家林老师(邮箱:[email protected] QQ: 1740415547) Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者. 在Spark.Hadoop.Android等方面有丰

基于SPARK SQL 读写ORACLE 的简单案例分析常见问题

该文章出自上海harli,偷偷地把女神的东西拿出来,希望女神不要介意. 一.概述 本文主要内容包含Spark SQL读写Oracle表数据的简单案例,并针对案例中比较常见的几个问题给出解决方法. 最后从常见的java.lang.ClassNotFoundException(无法找到驱动类)的异常问题出发,分析相关的几种解决方法,以及各个解决方法之间的异同点. 二.案例中比较常见问题及其解决方法 2.1 启动 首先查看Spark 官网给出的SparkSQL的编程指南部分(http://spark.

Spark SQL JSON数据处理

背景 这一篇可以说是“Hive JSON数据处理的一点探索”的兄弟篇. 平台为了加速即席查询的分析效率,在我们的Hadoop集群上安装部署了Spark Server,并且与我们的Hive数据仓库共享元数据.也就是说,我们的用户即可以通过HiveServer2使用Hive SQL执行MapReduce分析数据,也可以使用SparkServer使用Spark SQL(Hive SQL)执行Spark Application分析数据. 两者除去MapReduce和Spark Application计算

Spark修炼之道(进阶篇)——Spark入门到精通:第十三节 Spark Streaming—— Spark SQL、DataFrame与Spark Streaming

主要内容 Spark SQL.DataFrame与Spark Streaming 1. Spark SQL.DataFrame与Spark Streaming 源码直接参照:https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/streaming/SqlNetworkWordCount.scala import org.apache.spark.SparkConf

Spark修炼之道(进阶篇)——Spark入门到精通:第九节 Spark SQL运行流程解析

1.整体运行流程 使用下列代码对SparkSQL流程进行分析,让大家明白LogicalPlan的几种状态,理解SparkSQL整体执行流程 // sc is an existing SparkContext. val sqlContext = new org.apache.spark.sql.SQLContext(sc) // this is used to implicitly convert an RDD to a DataFrame. import sqlContext.implicits