开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:DataFrame 介绍_ DataFrame 是什么】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12045
DataFrame 介绍_ DataFrame 是什么
内容介绍
一、DataFrame 是什么
二、总结
之前介绍了 Dataset 的特点,而在 SparkSQL 中有 Dataset 和 DataFrame 两个重要的 API 。两者负责不同的语义,既可以执行 SQL 又可以执行强类型的 API ,这两者是 SparkSQL 的编程模型。本章主要介绍 DataFrame ,知道 DataFrame 是什么,用来做什么,同时它表达的语义是什么意思。
一、DataFrame是什么
要介绍 DataFrame 的特点首先要知道 DataFrame 是什么。
DataFrame 是 SparkSQL 中一个表示关系型数据库中表的函数式抽象,其作用是让 Spark 处理大规模结构化数据的时候更加容易。
一般 DataFrame 可以处理结构化的数据,或者是半结构化的数据,因为这两类数据中都可以获取到 Schema 信息也就是说 DataFrame 中有 Schema 信息,可以像操作表一样操作 DataFrame
1.RDD 和 DataFrame 的区别
下图是为了告诉我们,RDD 和 DataFrame 是有区别的,RDD 存储一个对象就是存储一个对象,根本不知道存储的具体内容是什么,即 RDD 存储的 Person 对象,并不知道其中有什么字段和类型,所以 RDD 对所有的数据都是一视同仁,而DataFrame 中是有结构信息的。
DataFrame 由两部分构成,一是 row 的集合,每个 row 对象表示一个行,二是描述 DataFrame 结构的 Schema。
DataFrame 会将整个 DataFrame 数据集给表示为行和列,两部分,同时列又有类型。
如下图:
可以看出 DataFrame 十分类似于关系型数据库的一张表,DataFrame 其实是 Spark 从 Python 中去借过来的一个概念,而这个 DataFrame 就是代表了一个简单的数据集合,简而言之 DataFrame 就是一张表,对其进行操作就类似于对关系型数据库的表进行操作。
2.DataFrame 支持的操作
DataFrame 支持 sQL 中常见的操作,例如: select , filter , join ,group, sort,join 等。
首先打开 IDEA,创建一个新的方法,同时要注意仍要创建一个 SparkSession。1.首先在 dataframe 中创建 SparkSession。2.创建 DataFrame。
3.DataFrame 用法。
l 代码如下:
@Test
def dataframe1(): unit = {
// 1.创建 Sparksession
val spark = Sparksession.builder()//
不用采取 new 的方式,直接通过 bulider()方法即可。
//设置参数,appName 命名为 dataframe1,同时设置6个线程
.appName( name = "dataframe1" )
.master( master ="local[6]")
.getorCreate()
//以上是标准构建者模式的写法
//2.创建 DataFrame,先导入 spark.implicits
Seq 是一个集合,创建两个对象,一个是 zhangsan,15岁;一个 lisi,20岁,最后在Seq 这个集合后.toDF(),就可以成功创建一个 DataFrame。其中的 toDF()来自implicits,implicits 当中就是为 Seq 这样的基础集合做了一个映射转换。最后也可以将 annotation 把类型给加出来。
import spark.implicits._
val dataFrame:DataFrame = Seq(Person("zhangsan",15),Person("lisi",20)).toDF()
//3.DataFrame 可以先编写一条 sql 语句
select name from t where t.age >10意为查询t表中字段 age 的值大于10的数据。因为 DataFrame 与 SQL 十分相似,都是用于操作关系型表的,所以就可以使用DataFrame 完成以上 sql 语句操作。
dataFrame.where( condition = 'age >10)//
设置查询条件
. select( cols ='name)//
设置查询的表
.show()//
输出展示结果
//将以上 dataFrame 语句与 SQL 语句对比,可以发现两者十分相似,同时 SQL 能做的操作,dataFrame 同样支持。
4. 运行结果
将代码在 IDAE 运行后,可以看到显示的年龄大于10的 zhangsan 和 lisi 数据被成功查出,说明以上 dataFrame 的使用正确。
二、总结
1. DataFrame 是类似与一张关系型数据库的表
2. 在 DataFrame 上的操作非常类似 SQL 语句
3. 而 DataFrame 为什么能够使用 SQL 语句和关系型数据表是因为 DataFrame 中划分为行和列还有 Schema,Schema 指结构性信息。