SparkSql常用函数(2)
1.show():
默认显示前20条数据,如需显示前5行,则用show(5)即可
2.printSchema()
输出表结构:字段名和字段数据类型等信息
3.read()
读取结构化数据文件,要根据数据文件类型的不同选用对应的函数:
csv——读取csv文件:通过option("header","true)和option("inferSchema","true“)来设置读入表头和自动推断数据类型
json---读取json文件
4.select()
查询指定字段,只需要将多个字段名放到参数的位置即可,多个字段名之间用逗号隔开
book.select("id","name").show()
5.where(条件表达式)---筛选满足指定条件的数据
获取字段值:$
-
统计书名包含“微积分”的书的数量
(1)筛选到书名包含“微积分”的书---满足指定条件的数where/filter(条件表达式)
book.where($"name".like("%微积分%"))
6.count---统计记录的条数
(2)统计(1)执行后满足条件的数据的条数
val num = book.where($"name".like("%微积分%")).count()
| 函数 | 概念 | 举例 |
| show() | 查看表结构内容 |
show() → 快速浏览表格的前20行 show(5) → 只看前5行 就像在Excel中滚动查看数据一样 |
| printSchema | 查看表格结构 |
文件名.printSchema() // 示例: |
| read | 打开文件 |
CSV文件:spark.read.csv() 1、需要告诉Spark:“第一行是标题” (header=true) 2、“请自动识别数据类型”(inferSchema=true) JSON文件:spark.read.json() Spark会自动识别结构 |
| select | 选择想看哪些列 |
文件名.select("列名1", "列名2", "列名3") // 示例: |
| where | 筛选特定条件的数据 |
文件名.where(条件) // 示例: // 筛选书名包含"微积分"的图书 // 筛选年龄大于18的学生 |
| count | 统计满足条件的数据 |
文件名.count() // 示例: // 统计微积分书籍数量 |
| limit | 限制数据条数 |
limit = "我要看多少条" book.limit(5) // 只看前5本书 |
| orderBy | 排序 |
orderBy = "按什么顺序排队" 不加 // 按价格从便宜到贵排列 加 // 按评分从高到低排列 |
课堂练习:
案例一:
查询评分大于等于9分,小于等于9.5分,且书名包含“艺术”的书,只展示前10条的序号、书名和评分,按分数从高到低排列。
1.条件——where(1)评分大于等于9分,小于等于9.5分
(2) 书名包含“艺术”的书
2.限制数据的条数——limit
3.只要序号、书名和评分——select
4.按分数从高到低排列——orderBy
// 先读取数据创建book变量
val book = spark.read.option("header","true").csv("file:///opt/data/book.csv")
//数据筛选
val df1 = book.where($"rating" > 9 && $"rating" < 9.5 && $"name".like("%微积分%"))
//结果限制
val df2 = df1.limit(10)
// 列选择
val df3 = df2.select("id","name","rating")
//查询结果
df3.orderBy($"rating".desc).show()
案例二:
1.上传student.json文件到vmware中master主机上
2.将student.json文件传给slave1和slave2
scp -r /opt/data/student.json slave1:/opt/data
scp -r /opt/data/student.json slave2:/opt/data
从 JSON 文件读取数据并进行查询操作:
- 创建一个包含学生信息的 List:
(1,"Tom",19,80), (2,"Bob",18,86), (3,"Jerry",20,76), (4,"Ken",19,65) - 使用
spark.read.json("file:///opt/data/student2.json")读取本地 JSON 文件 - 读取后自动推断结构,生成包含 age、gender、name、score 字段的 DataFrame
- 使用
student2.show展示所有数据内容,显示学生的年龄、性别、姓名和分数信息 
- 最后使用
student2.select("name","age","score").show(2)正确选择指定列并显示前 2 行数据 
- 使用
student2.where($"age">20).show成功筛选出年龄大于20岁的学生 
-
给每个学生的score字段值+5,并将加和后的字段重新命名为newScore

- 最后使用
student2.orderBy($"score".desc).show(2)按分数降序排列并显示前2行数据 
更多推荐
所有评论(0)