Spark - [03] RDD概述

news/2024/9/25 15:28:27

RDD,分布式数据集,是Spark中最基本的数据抽象。

 

一、什么是RDD

RDD(Resilient Distributed Dataset)叫做分布式数据集,是 Spark 中最基本的数据抽象。

代码中是一个抽象类,它代表一个不可变、可分区、里面的元素可并行计算的集合。

 

 

二、RDD的属性

① 一组分区(Partition),即数据集的基本组成单位;
② 一个计算每个分区的函数;
③ RDD 之间的依赖关系;
④ 一个 Partitioner,即RDD的分片函数;
⑤ 一个列表,存储存取每个 Partition 的优先位置(preferred location)

 

 

三、RDD的特点

RDD 表示只读的分区的数据集,对RDD进行改动,只能通过 RDD 转换操作,由一个RDD得到一个新的RDD,新的RDD包含了从其他RDD衍生所必需的信息。

RDDs 之间存在依赖,RDD的执行是按照血缘关系延时计算的。如果血缘关系较长,可以通过持久化 RDD 来切断血缘关系。

 

(1)分区

RDD 逻辑上是分区的,每个分区的数据是抽象存在的,计算的时候会通过一个 compute 函数得到每个分区的数据。

如果RDD是通过已有的文件系统创建,则 compute 函数是读取指定文件系统中的数据,如果 RDD 是通过其他 RDD转换而来,则 compute 函数是执行转换逻辑将其他 RDD 的数据进行转换。

 

 

 

(2)只读

RDD 是只读的,要想改变RDD中的数据,只能在现有的RDD基础上创建新的RDD。

由一个 RDD 转换到另一个 RDD,可以通过丰富的操作算子实现,不再像 MapReduce 那样只能写 map 和 reduce

RDD 的操作算子包括两类:

一类叫做transformations,它是用来将 RDD 进行转化,构建 RDD 的血缘关系;

另一类叫做 actions,它是用来触发 RDD 的计算,得到 RDD 的相关计算结果或者将 RDD 保存到文件系统中。

 

(3)依赖

RDDs 通过操作算子进行转换,转换得到的新 RDD 包含了 从其他 RDDs 衍生所必需的信息,RDDs 之间维护着这种血缘关系,也称之为依赖。

依赖包括两种:

一种是窄依赖,RDDs 之间分区是一一对应的,

另一种是宽依赖,下游的RDD的每个分区与上游RDD(也称之为父RDD)的每个分区都有关,是多对多关系。

 

(4)缓存

  如果在应用程序中多次使用同一个 RDD,可以将该RDD缓存起来,该RDD只有在第一次计算的时候会根据血缘关系得到的分区的数据,在后续其他地方用到该RDD的时候,会直接从缓存处而不用再根据血缘关系计算,这样就加速后期的重用。

 

(5)checkpoint

  虽然 RDD 的血缘关系天然地可以实现容错,当 RDD 的某个分区数据失败或丢失,可以通过血缘关系重建。但是对于长时间迭代型应用来说,随着迭代的进行,RDDs 之间的血缘关系会越来越长,一旦在后续迭代过程中出错,则需要通过非常长的血缘关系去重建,势必影响性能。为此,RDD 支持 checkpoint 将数据保存到持久化的存储中,这样就可以切断之前的血缘关系,因为 checkpoint 后的RDD不需要知道它的父 RDDs了,它可以从 checkpoint 处 拿到数据。

 

 

 

 

— 要养成终身学习的习惯 —

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/30733.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

原型设计工具

2252118顾佳豪 Axure RP 主要特点: 交互设计: 支持复杂的动态交互和逻辑表达。 文档输出: 可以输出规范的产品需求文档。 协作功能: 支持团队协作和项目管理。 高保真原型: 创建接近最终产品的高保真原型。 使用方法: 使用库面板中的元件创建页面布局。 利用交互功能定义元件行…

随记《黑暗》——2024.5.12

黑暗到来时人们不应害怕 因为我们早已经历过太多黑暗 这场动荡会让人记忆尤新 因为前所未有的光明即将到来!

松弛操作

松弛即利用某个点使得某条边的距离变短,如下图:\(1\) 到 \(2\) 的距离,不如从 \(1\) 到 \(3\) 再到 \(2\) 的距离短,于是我们就可以经过 \(3\) 使得 \(1\to2\) 这条边变短。而这就是松弛。

生命周期---Vue2Vue3

生命周期---Vue2&Vue3简单理解为:组件从创建到被销毁的一个过程,就相当于人的一生,从出生到死亡的一个过程。组件的生命周期也称生命周期、生命周期函数、生命周期钩子生命周期在特定的时刻会调用特定的函数生命周期分为四个阶段,每个阶段都有两个钩子,现只讨论这八个…

怎么使用 MarsEdit 来管理博客园的博客

MarsEdit 可以管理任何支持 MetaWeblog 协议的博客。这点来说,比 ia writer 这类只支持 wordpress, ghost 这些主流博客架构的文本编辑器还是强很多的。要用 MarsEidt 来管理博客园,需要以下几步: 1. 在博客园上申请访问令牌 2. 在 MarsEdit 上添加博客园网址 3. 添加账号、…

Jenkins script example

1. 参数化构建2. Jenkins scriptpodTemplate(name: jenkins-slave-4000, cloud: kubernetes,namespace: default, label: jenkins-slave-4000,containers: [containerTemplate(name: jnlp,image: "${HARBOR_URL}/ops/jenkins-slave:v2.2.2",alwaysPullImage: true),]…

SystemVerilog -- 3.0 SystemVerilog Threads

SystemVerilog Threads What are SystemVerilog threads or processes ? thread 或 process 是作为单独实体执行的任何一段代码。在 verilog 中,每个initial和always块都作为单独的 thread 生成,这些 threads 从 0 time 开始并行运行。block 还会创建并运行的不同 threads。…

24年5.12流片复盘

非常值得纪念的一天,因为去年这个时候流片delay,今年顺利流出去了,这是一个大的进步,但是还是要做复盘。 首先是进度整体上的复盘。这次流片从一月初开始进行规划,到五月初投片,总共花费五个月时间,五个月内,按照最初的时间规划,一月是把规划基本都做完,给项目参与人…