网站域名的作用是什么曲阜网站设计
文章目录
- 一、准备工作
 - 1、准备数据文件
 - 2、启动Spark Shell
 
- 二、加载数据为Dataset
 - 1、读文件得数据集
 
- 三、给数据集添加元数据信息
 - 1、定义学生样例类
 - 2、导入隐式转换
 - 3、将数据集转换成学生数据集
 - 4、对学生数据集进行操作
 - (1)显示数据集内容
 - (2)打印数据集模式
 - (3)对数据集进行投影操作
 - (4)对数据集进行过滤操作
 - (5)对数据集进行统计操作
 - (6)对数据集进行排序操作
 - (7)重命名数据集字段
 
- 四、将数据集转为数据帧
 - 1、将数据集转为数据帧
 - 2、对学生数据帧进行操作
 - (1)显示数据帧内容
 - (2)显示数据帧模式信息
 - (3)对数据帧进行投影操作
 - (4)对数据帧进行过滤操作
 - (5)对数据帧进行统计操作
 - (6)对数据帧进行排序操作
 - (7)重命名数据帧字段
 
- 五、基于数据帧进行SQL查询
 - 1、基于数据帧创建临时视图
 - 2、使用spark对象执行SQL查询
 - (1)查询全部表记录
 - (2)显示数据表结构
 - (3)对表进行投影操作
 - (4)对表进行选择操作
 - (5)对表进行统计操作
 - (6)对表进行排序操作
 - (7)重命名数据表字段
 
一、准备工作
1、准备数据文件
1,郑秀芸,女,20
2,王志峰,男,18
3,陈燕文,女,21
4,郑国栋,男,19
5,肖雨涵,男,20 
- 在/home目录里创建student.txt文件
 
cd /home
vim student.txt
- 将student.txt上传到HDFS的/student/input目录
 
hdfs dfs -mkdir -p /student/input
hdfs dfs -put student.txt /student/input
2、启动Spark Shell
- 启动Spark Shell,执行命令:
spark-shell --master spark://master:7077 

二、加载数据为Dataset
1、读文件得数据集
- 调用SparkSession对象的read.textFile()可以读取指定路径中的文件内容,并加载为一个Dataset
 - 执行命令:
val ds = spark.read.textFile("hdfs://master:9000/student/input/student.txt")

 
三、给数据集添加元数据信息
1、定义学生样例类
- 定义一个样例类Student,用于存放数据描述信息(Schema)
 - 执行命令:
case class Student(id: Int, name: String, gender: String, age: Int)

 
2、导入隐式转换
- 执行命令:
import spark.implicits._(_表示implicits包里所有的类,类似于Java里的*)

 
3、将数据集转换成学生数据集
- 执行命令:paste进入粘贴模式,然后执行如下命令
 
val studentDS = ds.map(line => {val fields = line.split(",")val id = fields(0).toIntval name = fields(1)val gender = fields(2)val age = fields(3).toIntStudent(id, name, gender, age)}
) 

4、对学生数据集进行操作
(1)显示数据集内容
- 执行命令:
studentDS.show

 
(2)打印数据集模式
- 执行命令:
studentDS.printSchema

 
(3)对数据集进行投影操作
- 显示学生的姓名和年龄字段,执行命令:
studentDS.select("name", "age").show

 - 对应的SQL语句:
select name, age from student 
(4)对数据集进行过滤操作
- 显示女生记录,执行命令:
studentDS.filter("gender == '女'").show

 - 显示年龄在[19, 20]之间的记录
 - 执行命令:
val ds1 = studentDS.filter("age >= 19")


 - 两个数据集求交集

 - 可以有更简单的处理方式,执行命令:
studentDS.filter("age >= 19 and age <= 20").show

 
(5)对数据集进行统计操作
- 求20岁以上的女生人数

 - 分组统计男女生总年龄,执行命令:
studentDS.groupBy("gender").sum("age").show

 - 分组统计男女生平均年龄:执行命令:
studentDS.groupBy("gender").sum("age").show

 - 分组统计男女生最大年龄,执行命令:
studentDS.groupBy("gender").max("age").show

 - 分组统计男女生最小年龄,执行命令:
studentDS.groupBy("gender").min("age").show

 
(6)对数据集进行排序操作
- 按年龄升序排列,执行命令:
studentDS.sort("age").show()

 - 按年龄降序排列,执行命令:
studentDS.sort(studentDS("age").desc).show

 - 先按性别升序排列,再按年龄降序排列,执行命令:
studentDS.sort(studentDS("gender"), studentDS("age").desc).show()

 - 对应的SQL语句:
select * from student order by gender, age desc; 
(7)重命名数据集字段
- 执行命令:
studentDS.select(studentDS("id").as("学号"), studentDS("name").as("姓名"), studentDS("gender").as("性别"), studentDS("age").as("年龄")).show

 
四、将数据集转为数据帧
1、将数据集转为数据帧
- 将学生数据集转为学生数据帧,执行命令:
val studentDF = studentDS.toDF()

 
2、对学生数据帧进行操作
(1)显示数据帧内容
- 显示学生数据帧内容,执行命令:
studentDF.show

 
(2)显示数据帧模式信息
- 打印学生数据帧模式信息,执行命令:
studentDF.printSchema

 
(3)对数据帧进行投影操作
- 显示学生数据帧姓名与年龄字段,年龄加1,执行命令:
studentDF.select(studentDF("name"), studentDF("age") + 1).show

 
(4)对数据帧进行过滤操作
- 查询年龄在19岁以上的记录,执行命令:
studentDF.filter(studentDF("age") > 19).show

 - 查询20岁以上的女生记录,执行命令:
studentDF.filter("age > 20 and gender == '女'").show()

 
(5)对数据帧进行统计操作
- 统计学生数据帧总记录数,执行命令:
studentDF.count

 - 分组统计男女生总年龄,执行命令:
studentDF.groupBy("gender").sum("age").show

 - 分组统计男女生平均年龄,执行命令:
studentDF.groupBy("gender").avg("age").show

 - 分组统计男女生最大年龄,执行命令:
studentDF.groupBy("gender").max("age").show

 - 分组统计男女生最小年龄,执行命令:
studentDF.groupBy("gender").min("age").show

 - 分组统计男女生人数,执行命令:
studentDF.groupBy("gender").count.show

 
(6)对数据帧进行排序操作
- 对年龄升序排列,执行命令:
studentDF.sort("age").show

 - 对年龄降序排列,执行命令:
studentDF.sort(studentDF("age").desc).show

 - 先按性别升序,再按年龄降序,- 执行命令:
studentDF.sort(studentDF("gender"), studentDF("age").desc).show

 
(7)重命名数据帧字段
- 执行命令:
studentDF.select(studentDF("id").as("学号"), studentDF("name").as("姓名"), studentDF("gender").as("性别"), studentDF("age").as("年龄")).show

 
五、基于数据帧进行SQL查询
1、基于数据帧创建临时视图
- 执行命令:
studentDF.createOrReplaceTempView("student")

 
2、使用spark对象执行SQL查询
(1)查询全部表记录
- 执行命令:
spark.sql("select * from student").show

 
(2)显示数据表结构
- 执行命令:
spark.sql("describe student").show

 
(3)对表进行投影操作
- 执行命令:
spark.sql("select name, age + 1 from student").show

 
(4)对表进行选择操作
- 查询年龄在19岁以上的记录,执行命令:
spark.sql("select * from student where age > 19").show

 - 查询20岁以上的女生记录,执行命令:
spark.sql("select * from student where age > 20 and gender = '女'").show()

 
(5)对表进行统计操作
- 查询学生表总记录数,执行命令:
spark.sql("select count(*) count from student").show

 - 分组统计男女生总年龄,执行命令:
spark.sql("select gender, sum(age) from student group by gender").show

 - 分组统计男女生平均年龄,执行命令:
spark.sql("select gender, avg(age) from student group by gender").show

 - 分组统计男女生最大年龄,执行命令:
spark.sql("select gender, max(age) from student group by gender").show 

- 分组统计男女生最小年龄,执行命令:
spark.sql("select gender, min(age) from student group by gender").show

 - 分组统计男女生人数,执行命令:
spark.sql("select gender, count(*) count from student group by gender").show

 
(6)对表进行排序操作
- 按年龄升序排列,执行命令:
spark.sql("select * from student order by age").show

 - 按年龄降序排列,执行命令:
spark.sql("select * from student order by age desc").show

 - 先按性别升序,再按年龄降序,执行命令:
spark.sql("select * from student order by gender asc, age desc").show

 
(7)重命名数据表字段
- 执行命令:
spark.sql("select id stu_id, name stu_name, gender stu_gender, age stu_age from student").show()

 
