Dataset 介绍_ Dataset 底层类型 | 学习笔记

简介: 快速学习 Dataset 介绍_ Dataset 底层类型

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段Dataset 介绍_ Dataset 底层类型】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12043


Dataset 介绍_ Dataset 底层类型


Dataset底层类型

 

接下来介绍一下 data set 底层是什么,希望大家能够搞清楚 dataset 跟 rdd 的之间的关系,从而去理解 dataset 它本质上的一些原理。进入到笔记当中,第一个小部分的内容就是 SQL 语句是可以经过一些优化的,就比如说,select name,age,From,where,然后 groupby,再 order by。

image.png

Date set 它是命令式,API 居多,这是第三个里面有很多命令式 API,比如说 filter,包括前面学习过的 where,那这些都是 dataset 命令式 API,这些 API 会经过优化器的优化。

简单做一个测试,打开的 idea,这是上面的一个案例的代码,直接拷贝前大半部分,这大半部分,其实所做的事情也比较简单,就是首先创建了一个 spark session通过 spark 导入了隐式转换,导入隐式转换以后,就通过 DS 把一个 RDD 转成了 dataset。

image.png

看一下这个 data set 的 query execution。通过这个 query execution,大家就能看到它的逻辑执行计划。通过的另外一个叫 explain,既能看到逻辑这项计划,也能看到物理志向计划。

只要里面给一个 ture就可以,拿到这个 ex plan,看 explain 的声明,它是一个 unit,它会直接进行打印。所以,不需要做任何的操作,只需要运行这段代码给他改名为 DECIDE2,再去运行一遍 explain,已经运行得到了结果,前面创建了一个 dead sight,没有写任何 SQL,打印出的结果,依然是 logic plan 的。

image.png

成了一个 optimized 树,分析这棵树,加入一些这个 steamer 信息,再去优化这一颗 ast 语法树,最终生成了 physical plan,也就是物理执行计划。

image.png

如果是这样就证明了 dataset 无论是否执行 SQL 语句,它其实都会被的优化器所优化,无论怎么去写这个 dataset 的代码。他都比 RDD 要高效,因为他会去处理你一些习惯性的一些错误。所以,这是的 dataset 第一个问题,也就是说它是支持优化。再去看第二个问题,他底层是什么。

在刚才的这段代码里面打印出来是有一个 physical plan,这个 physical plant 就是物理执行计划。整个的 sight 的执行是分层的,第一层就是的这样的一段代码, sight 的一个声明,包括 set 的一个计算。

这个东西会去教给的一个语法优化器来进行分析,优化过了以后会生成的物理执行计划。也就是说不是直接运行的这个的 sight,而是经过优化器做了一个优化,优化完了以后,最终生成物理执行计划。本质上就是 RDD,这个调度到集群。整个就是这样的一个步骤。

image.png

物理执行计划当中的这个 RDD 是什么,做一个简单的小测试。来看到这个 dead sight,然后把 ex plana一行先给注释掉,直接给他 set query execution,通过这个query execution,就能查看到他所生成的。但是query execution其中能够直接获取到的底层的值。通过这个 query executionr to RDD ,可以把一个 query execution 转成 RDD,就为这个 RDD 命名叫做 execution。

image.png 

act application to value definition,来去补全的这个 RDD 的类型,RDD的类型是一个 Internalrow ,也就是说无论你 dataset 里面放什么,它返回的永远是 Internalrow.

image.png

总结这个原理能带给什么样的启示呢?

首先把源代码变成 data set,这个 data set当中是一个 person 类型的,就是 person 对象,接下来 data set 会交给 catalyst 来进行优化。

Catalyst 优化过了,会生成一个 RDD,然后会交由到 spark 集群当中去执行,这个对象,其实就是 data set 的底层的对象,data set 当中有一个叫做 in Co 的东西,会去将 person 对象先通过 encoder 找对象,转成的 Internalrow。

接下来,你读取出来这样的一个 dataset,转为的 person 类型,从而再交给你去使用。所以从这一点知道,这是 dataset 的底层,其实就是 RDD,这个 RDD 比较特殊,它的类型是 Internalrow。

image.png

不仅包含数据的类型,数据的位置,还包含了这个数据本身,所以 Internalrow,是把任何一个对象的类型,都会把你的结构保留下来,并且以一种统一的形式运行在集群当中来进行计算。

相关文章
|
9月前
|
PyTorch 算法框架/工具 索引
Pytorch学习笔记(2):数据读取机制(DataLoader与Dataset)
Pytorch学习笔记(2):数据读取机制(DataLoader与Dataset)
430 0
Pytorch学习笔记(2):数据读取机制(DataLoader与Dataset)
|
SQL 分布式计算 安全
Dataset 和 DataFrame 的区别_区别 | 学习笔记
快速学习 Dataset 和 DataFrame 的区别_区别
467 0
Dataset 和 DataFrame 的区别_区别 | 学习笔记
|
4月前
|
SQL 分布式计算 Java
Spark中的DataFrame和Dataset有什么区别?请解释其概念和用途。
Spark中的DataFrame和Dataset有什么区别?请解释其概念和用途。
74 0
|
11月前
|
SQL 存储 分布式计算
Spark DataSet 和 DataFrame 的区别
Spark DataSet 和 DataFrame 的区别
135 0
|
缓存 Python
|
SQL 分布式计算 大数据
Dataset介绍_将 Dataset 转为同泛型的 RDD | 学习笔记
快速学习 Dataset介绍_将 Dataset 转为同泛型的 RDD
131 0
Dataset介绍_将 Dataset 转为同泛型的 RDD | 学习笔记
|
SQL 分布式计算 关系型数据库
Dataset 和DataFrame 的区别_Row 对象 | 学习笔记
快速学习 Dataset 和DataFrame 的区别_Row 对象
207 0
Dataset 和DataFrame 的区别_Row 对象 | 学习笔记
|
SQL 分布式计算 安全
Dataset 介绍_Dataset 是什么 | 学习笔记
快速学习 Dataset 介绍_Dataset 是什么
211 0
Dataset 介绍_Dataset 是什么 | 学习笔记
|
C# 数据库
C#编程-69:DataReader和DataSet读取数据库内容示例_
C#编程-69:DataReader和DataSet读取数据库内容示例_
144 0
C#编程-66:DataSet数据集的简单操作
C#编程-66:DataSet数据集的简单操作
C#编程-66:DataSet数据集的简单操作