Spark Sql概述 数据集 数据帧

零、学习目标

  1. 掌握application.properties配置文件
  2. 掌握application.yaml配置文件
  3. 掌握使用@ConfigurationProperties注入属性
  4. 掌握使用@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

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值