2.根据下面的数据,使用Spark进行分析
员工数据
empno,ename,job,mgr,hiredate,sal,comm,deptno
7369,SMITH,CLERK,7902,1980-12-17,800,NULL,20
7499,ALLEN,SALESMAN,7698,1981-2-20,1600,300,30
7521,WARD,SALESMAN,7698,1981-2-22,1250,500,30
7566,JONES,MANAGER,7839,1981-4-2,2975,NULL,20
7654,MARTIN,SALESMAN,7698,1981-9-28,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-5-1,2850,NULL,30
7782,CLARK,MANAGER,7839,1981-6-9,2450,NULL,10
7788,SCOTT,ANALYST,7566,1987-7-13,3000,NULL,20
7839,KING,PRESIDENT,NULL,1981-11-17,5000,NULL,10
7844,TURNER,SALESMAN,7698,1981-9-8,1500,0,30
7876,ADAMS,CLERK,7788,87-7-13,1100,NULL,20
7900,JAMES,CLERK,7698,1981-12-3,950,NULL,30
7902,FORD,ANALYST,7566,1981-12-3,3000,NULL,20
7934,MILLER,CLERK,7782,1982-1-23,1300,NULL,10
说明:empno为员工编号,ename为员工姓名,job为职位,mgr为该员工的领导编号,hiredate为员工入职时间,sal为员工薪资,comm为员工奖金,deptno为员工所在部门编号
部门数据
deptno,dname,loc
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
说明:deptno为部门编号,dname为部门名称,loc为部门所在城市
(1)创建maven项目,将上述数据分别存储在本地文件系统的emp.txt和dept.txt两个文件中,使用Spark导入两个文件中的数据并创建两个名为empDF和deptDF的DataFrame
(2)使用DataFrame API,统计每个部门员工的平均薪资
(3)使用DataFrame API,查询各部门员工薪资大于本部门平均薪资员工信息,包括员工编号、员工姓名、入职时间和薪资
(4)使用DataFrame API,查询不是领导的员工信息,包括员工编号、员工姓名和入职时间
(5)使用DataFrame API,查询其领导是‘BLAKE’的员工信息,包括员工编号、员工姓名
(6)使用DataFrame API,查询和SMITH工作相同的员工信息
(7)使用DataFrame API,查询在CHICAGO工作的所有员工信息,包括员工编号、员工姓名、员工所在部门
(8)使用DataFrame API,查询10号部门的员工在整个公司中所占的比例,显示如25.23%
(8)使用DataFrame API,查询10号部门的员工在整个公司中所占的比例,显示如25.23%
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
/**
- Created by hp on 2019/12/15.
*/
object SparkDrfame {
def main(args: Array[String]) {
val spark=SparkSession.builder().appName(“fs”).master(“local[*]”).getOrCreate()
import spark.implicits._
val empDF=spark.read.format(“csv”).option(“sep”,",").option(“inferSchema”,“true”).option(“header”,“true”).load(“f:///data//emp.txt”)//.show()
val deptDF=spark.read.format("csv").option("sep",",").option("inferSchema","true").option("header","true").load("f:///data//dept.txt")
//1.求每个部门的平均工资
empDF.groupBy(“deptno”).mean(“sal”).show()//.join()
//2.使用dataframe,查询个部门员工薪资大于本本的平均薪资员工编号,姓名,入职时间,薪资
empDF.groupBy("deptno").mean("sal").join(empDF,"deptno").select("deptno","ename","hiredate","sal").where($"sal">$"avg(sal)").show()
//3.查询不是领导的员工信息,包括编号姓名,入职时间
println(“不是领导的员工”)
empDF.join(deptDF,“deptno”).select(“ename”,“hiredate”).where( " m g r " = =