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,是把任何一个对象的类型,都会把你的结构保留下来,并且以一种统一的形式运行在集群当中来进行计算。

相关文章
|
移动开发 前端开发 JavaScript
js实现图片压缩上传
最近在研究H5前端图片处理相关技术,方向有图片压缩、裁切、旋转、模糊等。
407 0
|
开发者
Flutter笔记:build方法、构建上下文BuildContext解析
本文主要介绍Flutter中的build方法和构建上下文对象。
761 2
Flutter笔记:build方法、构建上下文BuildContext解析
|
机器学习/深度学习 PyTorch 算法框架/工具
【单点知识】基于实例详解PyTorch中的DataLoader类
【单点知识】基于实例详解PyTorch中的DataLoader类
1694 2
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch基础之网络模块torch.nn中函数和模板类的使用详解(附源码)
PyTorch基础之网络模块torch.nn中函数和模板类的使用详解(附源码)
1300 0
|
存储 缓存 负载均衡
高可用mongodb集群(分片+副本):规划及部署
高可用mongodb集群(分片+副本):规划及部署
1552 0
|
8月前
|
存储 机器学习/深度学习
MustDrop:多阶段去除冗余视觉token,提升多模态大模型推理效率
本文提出了一种高效的多模态大模型,多阶段去除冗余视觉token——MustDrop。多模态大模型中的视觉tokens通常表现出显著的空间和时间冗余,并且大模型的大部分输入令牌是视觉tokens,这极大程度上影响了多模态大模型推理效率。
422 11
|
存储 缓存 安全
【VSAN数据恢复】VSAN集群节点数据迁移失败的数据恢复案例
VSAN存储是一个对象存储,以文件系统呈现给在vSphere主机上。这个对象存储服务会从VSAN集群中的每台主机上加载卷,将卷展现为单一的、在所有节点上都可见的分布式共享数据存储。 对于虚拟机来说,只有一个数据存储,这个分布式数据存储来自VSAN集群中每一台vSphere主机上的存储空间,通过磁盘组进行配置,在单独的存储中存放所有的虚拟机文件。这种数据存储方式比较安全,当闪存盘或者容量盘出现故障的时候,数据会向其他节点转移,在转移过程中有可能出现故障。
|
10月前
|
存储 缓存 数据安全/隐私保护
DMA(Direct Memory Access):直接内存访问
DMA(Direct Memory Access)是一种允许外设直接与内存进行数据传输的技术,无需 CPU 干预。它通过减轻 CPU 负担、提高数据传输效率来提升系统性能。DMA 的工作模式包括直接模式和 FIFO 模式,数据传输方式有单字传送和块传送,寻址模式有增量寻址和非增量寻址。通过缓存一致性协议、同步机制、数据校验和合理的内存管理,DMA 确保了数据在内存中的一致性和完整性。
1778 0
|
JSON Java API
Python教程:一文了解Python requests模块
Python 中的 requests 模块是一个简洁而强大的 HTTP 库,用于向 Web 服务器发送 HTTP 请求和处理响应。它让开发者能够更轻松地与网络资源进行交互,包括发送 GET、POST、PUT、DELETE 等类型的请求,并处理返回的数据。
1157 6
|
前端开发 JavaScript 测试技术