零、学习目标
- 掌握application.properties配置文件
- 掌握application.yaml配置文件
- 掌握使用@ConfigurationProperties注入属性
- 掌握使用@Value注入属性
四、简单使用Spark SQL
1.
2.
(1)准备数据
1,郑秀芸,女,20
2,王志峰,男,18
3,陈燕文,女,21
4,郑国栋,男,19
5,肖雨涵,男,20
hdfs dfs -mkdir -p /student2/input
hdfs dfs -put student.txt /student2/input/
hdfs dfs -cat /student2/input/student.txt
(2)启动Spark Shell
–** 启动Spark Shell,执行命令:spark-shell --master spark://master:7077**
–执行 :val ds =spark.read.textFile(“hdfs://master:9000/student2/input/student.txt”)
val ds =spark.read.textFile("hdfs://master:9000/student2/input/student.txt")
(3)查看显示模式
ds.printSchema
–这样的单列数据集太粗糙,应该加点元数据信息,让它更精细
(4)给数据集添加元数据
–**定义一个样例类Student,用于存放数据描述信息(Schema)
执行
case class Student(id:Int,name:String,gender:String,age:Int)
val student = Student(1,"张三丰","男",20)
(5)导入隐式转换
–导入SparkSession的隐式转换,以便后续可以使用Dataset的算子
import spark.implicits._
–_表示implicits包里所有的类,类似于Java里的*
(6)将数据集转换为学生数据集
val studentDS = ds.map(line => {
val fields = line.split(",")
val id = fields(0).toInt
val name = fields(1)
val gender = fields(2)
val age = fields(3).toInt
Student(id, name, gender, age)
}
)
4、对学生数据集进行操作
(1)显示数据集内容
执行
studentDS.show
–可以看到,studentDS中的数据类似于一张关系型数据库的表。
(2)打印数据模式
–执行命令:
studentDS.printSchema
(3)对数据集进行投影操作
–显示学生的姓名和年龄字段,执行命令:
studentDS.select("name", "age").show
–如果给age + 1 ?
– 直接加肯定是不行的
–使用
studentDS.select(studentDS("name"),studentDS("age") ).show
–这里获取的是
–所有可以直接加1
studentDS.select(studentDS("name"),studentDS("age") + 1 ).show
–取别名
studentDS.select(studentDS("name").as("姓名"),(studentDS("age")+1).as("年龄")).show
(4)对数据集进行过滤操作
– 显示女生记录,执行命令
studentDS.filter("gender = '女'").show
–显示年龄在[19, 20]之间的记录
—先使用集合运算
–然后求交集
–如果条件是age <19 or age > 20,那么两个数据集ds1与ds2就应该求并集:ds1.union(ds2)
–使用逻辑运算
studentDS.filter("age >= 19 and age <= 20").show
–结果和刚刚的是一样的
(5)对数据集进行统计操作
1.求20岁以上的女生人数
studentDS.filter("age > 20 and gender = '女'").count
2.分组统计男女生总年龄
studentDS.groupBy("gender").sum("age").show
3.分组统计男女生平均年龄
studentDS.groupBy("gender").avg("age").show
4.分组统计男女生最大年龄
studentDS.groupBy("gender").max("age").show
5.分组统计男女生最小年龄
studentDS.groupBy("gender").min("age").show
(6)对数据集进行排序操作
1.按年龄升序排列
studentDS.sort("age").show
–或
studentDS.sort(studentDS("age").asc).show
–或
studentDS.sort(asc("age")).show
2.按年龄降序排列
studentDS.sort(studentDS("age").desc).show
–或
studentDS.sort(desc("age")).show
3.第二关键字
studentDS.sort(asc("gender"),desc("age")).show
4.将数据集转为数据帧
val studentDF = studentDS.toDF()
5.对学生数据帧进行操作
数组帧的操作和上述数据集的操作一样
下面展示不一样的地方
基于数据帧进行SQL查询
studentDF.createTempView("student")
–如果视图存在则会报错
–所有推荐使用
studentDF.createOrReplaceTempView("student")
–如果不存在就创建,存在就替换
2、使用spark对象执行SQL查询
–有了临时表,就可以使用spark。sql,直接写sql
1.查询全部数据
spark.sql("select * from student").show
2.显示表结构
spark.sql("describe student").show
3.对表进行投影操作
spark.sql("select name, age + 1 from student").show
1.对表进行选择操作
1.查询年龄在19岁以上的记录,执行命令
spark.sql("select * from student where age > 19").show
2.查询20岁以上的女生记录,执行命令
spark.sql("select * from student where age > 20 and gender = '女'").show()
3.查询学生表总记录数,执行命令
spark.sql("select count(*) count from student").show