首页 > 其他分享 >Spark - [03] RDD概述

Spark - [03] RDD概述

时间:2024-05-12 22:30:19浏览次数:21  
标签:03 依赖 RDDs 分区 血缘关系 RDD Spark 数据

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 处 拿到数据。

 

 

 

 

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

标签:03,依赖,RDDs,分区,血缘关系,RDD,Spark,数据
From: https://www.cnblogs.com/houhuilinblogs/p/18188320

相关文章

  • ROS2:报错:package 'turtle_tf2_py' not found
    在学习tf坐标变换的乌龟小实验中,运行乌龟仿真程序出现的报错问题分析:原因还是没有先source一下解决:首先source/opt/ros/galactic/setup.bash然后再运行乌龟ros2launchturtle_tf2_pyturtle_tf2_demo.launch.py  参考:github上的一个老哥的回答   顺带......
  • JavaScript中的 '===' 和 '=='
    在JavaScript中,== 和 === 都是用于比较值的相等性的运算符,但是它们的行为略有不同。== 运算符用于比较值的相等性,而不考虑它们的数据类型。这意味着如果两个值的值相等,即使它们的数据类型不同,它们也会被认为是相等的。例如,== 会将字符串 "123" 与数字 123 视为相等。......
  • ValueError: 'a' cannot be empty unless no samples are taken
    Here,Imettheerrormessageasfollows:defmaldroid_noniid(dataset,train_labels,num_users):num_shards,num_imgs=110,120idx_shard=[iforiinrange(num_shards)]dict_users={i:np.array([])foriinrange(num_users)}idxs=np......
  • P7903 兜心の顶(构造)
    P7903兜心の顶题目背景Source:八仙敬酒吕洞宾——醉酒提壶力千钧;铁拐李——旋肘膝撞醉还真;汉钟离——跌步抱坛兜心顶;蓝采和——单提敬酒拦腰破;张果老——醉酒抛杯踢连环;曹国舅——仙人敬酒锁喉扣;韩湘子——擒腕击胸醉吹箫;何仙姑——弹腰献酒醉荡步。题目描述给定正......
  • 在 Kubernetes 上运行 Apache Spark 进行大规模数据处理的实践
    在刚刚结束的KubernetesCommunityDay上海站,亚马逊云科技在云原生分论坛分享的“在Kunernets上运行ApacheSpark进行大规模数据处理实践”引起了现场参与者的关注。开发者告诉我们,为了充分利用Kubernetes的高可用设计、弹性,在越来越多的应用场景中,他们选择从Yarn迁移到......
  • 双核、DSPIC33CH128MP203-I/M5 DSPIC33CH128MP203-H/M5 DSPIC33CH128MP203-E/M5数字信
    产品简介dsPIC33CH双核数字信号控制器在单个芯片中集成了两个dsPICDSC内核,一个设计用作主器件,而另一个则设计用作从器件。从内核用于执行专用、时间关键型控制代码,而主内核则用于运行用户界面、系统监测和通信功能以及最终应用的定制。dsPIC33CH器件优化用于高性能数字电源、电......
  • 代码随想录训练营第三天 | 203.移处链表元素 707.设计链表 206.反转链表
    203.移除链表元素题目链接https://leetcode.cn/problems/remove-linked-list-elements/文章讲解https://programmercarl.com/0203.移除链表元素.html#算法公开课视频讲解https://www.bilibili.com/video/BV18B4y1s7R9/?vd_source=2b5b33d3d692b0064daff4e58957fc82tips:对......
  • MSB410在条件(%(Name)' == InputFile' OR %(Name)' == OutputFile
    问题:在VS2017中配置完了Qtvisualstudiotools插件后,编译时报错< MSB410在条件(%(Name)'==InputFile'OR%(Name)'==OutputFile > 原因及解决方法:插件版本问题,先卸载最新版,下载旧版:https://download.qt.io/archive/vsaddin/  此版本报错 安装后断网,取消自动更......
  • mysql Code: 1093. You can't specify target table for update in FROM clause
    执行如下sql会报错,大概是delete的where条件里面不能包含自身的表deletefromt_plan_newwhereplan2codeisnotnullandplan2versionisnotnulland(plan2code,plan2version)notin(selectplan2code,max(plan2version)fromt_plan_newgroupbyplan2code) 所以用临......
  • Error: Cannot find module 'C:\Program Files\nodejs\node_modules\npm\bin\no
     #参考:https://stackoverflow.com/questions/69541725/error-cannot-find-module-c-program-files-nodejs-node-modules-npm-bin-node-mod --- #问题描述在一直倒腾重新安装nodejs时报的一个这样的错,记录一下 在执行npm-v时报了如标题的错,见下图 --- #原因......