0x00 教程内容
- 基础环境准备
- Spark SQL 基础编程操作
- 执行 SQL 语句
- 保存 DataFrame 为其他格式
- 支持多种数据源
本文的前置教程课程为: Spark SQL快速入门(基础)
0x01 基础环境准备
1. 启动 Spark-Shell
spark-shell
2. 准备数据
vi /home/hadoop-sny/datas/teacher.json
{"name":"shaonaiyi", "age":"30", "height":198} {"name":"shaonaier", "age":"28", "height":174} {"name":"shaonaisan", "age":"25", "height":178} {"name":"shaonaisi", "age":"21", "height":183} {"name":"shaonaiwu", "age":"32", "height":165}
3. 生成DataFrame
在 spark-shell 中输入如下代码:
import org.apache.spark.sql.SparkSession val spark = SparkSession.builder().appName("PersonApp").getOrCreate() import spark.implicits._ val teacherDF = spark.read.json("/home/hadoop-sny/datas/teacher.json")
0x02 Spark SQL 基础编程操作
1. show()
teacherDF.show()
show()
:显示所有的数据
show(n)
:显示前n条数据
show(true)
: 字段最多显示20个字符,默认为true
show(false)
: 取消最多显示20个字符的限制
show(n, true)
:显示前n条并最多显示20个字符
字段最多显示20个字符的意思是,比如name字段,名称太长,超过了20个字符的话,会显示成 ...
,如果不超过则不会。
2. printSchema()
打印数据表的 Schema信息(结构):
teacherDF.printSchema()
3. 获取指定字段的统计信息
teacherDF.describe("height").show() //其中,Count:记录条数,Mean:平均值,Stddev:样本标准差,Min:最小值,Max:最大值
4. 获取数据操作
collect()
:获取所有数据到数组
collectAsList()
:获取所有数据到List
。
teacherDF.collect() teacherDF.collectAsList()
first()
: 获取第一行记录;
head(n)
:获取前 n 行记录;
take(n)
: 获取前 n 行数据;
takeAsList(n)
: 获取前 n 行数据,并以 List 的形式展示。
PS:head与take的结果其实是一样的。
5. 查询操作
查询名称为 shaonaiyi 或 年龄是30岁的数据:
teacherDF.where("name = 'shaonaiyi' or age = 28").show()
展示所有的老师名:
teacherDF.select("name").show()
展示所有的老师名及身高:
teacherDF.select("name", "height").show()
6. 过滤操作
展示所有年龄为30岁的老师,打印老师的名称与身高:
teacherDF.filter(teacherDF("age").equalTo("30")).select("name", "height").show()
limit(n)
方法获取指定的 DataFrame 的前 n 行记录,得到的是一个新转化生成的 DataFrame 对象。
teacherDF.limit(3).show()
7. 排序操作
排序操作有两种方法:orderBy()
和sort()
;
都是按指定字段
排序,默认为升序
。
desc:降序
asc :升序
teacherDF.orderBy(teacherDF("height").desc).show(false)