- Spark SQL是Spark中的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象,就是 DataFrame。
- DataFrame=RDD+Schema 。 它其实和关系型数据库中的表非常类似,RDD可以认为是表中的数据,Schema是表结构信息。 DataFrame可以通过很多来源进行构建,包括:结构化的数据文件,Hive中的表,外部的关系型数据 库,以及RDD
- Spark1.3出现的 DataFrame ,Spark1.6出现了 DataSet ,在Spark2.0中两者统一,DataFrame等于 DataSet[Row]
一、DataFrame的创建
1、要使用Spark SQL,首先需要创建一个SpakSession对象,可以通过SparkSession.builder().getOrCreate()方法获取
2、要是使用SpakSession创建DataFrame,可以使用spark.read操作,从不同类型的文件中加载数据创建DataFrame。
代码示例 | 描述 |
sparkSession.read.json("D:\\bigdata/student.json") | 读取json格式的文本文件 |
sparkSession.read.csv("D:\\bigdata/student.json") | 读取csv格式的文本文件 |
sparkSession.read.text("D:\\bigdata/student.json") | 读取text格式的文本文件 |
sparkSession.read.parquet("D:\\bigdata/student.json") | 读取parquet格式的文本文件 |
代码:
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local")
val sparkSession =
SparkSession.builder().appName("SqlDemoScala").config(conf).getOrCreate()
val stuDf = sparkSession.read.json("D:\\bigdata/student.json")
//打印student数据
stuDf.show()
}
二、DataFrame常见操作
2.1、DEL风格操作
- show() 查看DataFrame中的具体信息,默认显示所有,可以通过参数控制显示多少条数据
- printSchema:查看dataFrame的Schema信息
- select():查看DataFrame中选取部分的字段
val stuDf = sparkSession.read.json("D:\\bigdata/student.json")
//默认显示所有数据,可以通过参数控制显示多少条
stuDf.show(2)
stuDf.printSchema();
- filter():实现条件查询,过滤出想要的结果
- groupBy():对记录进行分组
- sort():对特定的字段进行排序操作
代码:
stuDf.filter(stuDf("age")>=19).show();
stuDf.groupBy("age").count().show();
stuDf.sort(stuDf("age").desc).show()
结果:
排序也可以如下写法,但想要添加隐式转换函数,否则语法报错:
import sparkSession.implicits._
stuDf.filter($"age">=19).show()
2.2 、SQL风格操作
DataFrame可以将它看成一个关系型数据表,然后在程序中使用spark.sql()的方式执行sq查看,使用sql风格的前提是要将dataFrame注册成一个临时表
//将DataFrame注册一个临时表
stuDf.createOrReplaceTempView("student")
//使用sql查询临时表中的数据
sparkSession.sql("select age,count(*) as num from student group by age")
.show()
sparkSession.stop()