一、什么是RDD?

RDD是Spark计算的时候操作的数据集,全称是Resilient Distributed Datasets(弹性分布式数据集)。

数据是分布在多台机器上的,为了好处理,将这些分布的数据抽象成一个RDD。这个RDD就是所有数据的代理,操作RDD就相当于操作分布在每台机器上的数据。

二、RDD 有三个基本特性

1. 分区

每一个 RDD 包含的数据被存储在系统的不同节点上,是由很多分区组成的,操作RDD的时候,对RDD里面的每一个分区进行操作。而这些操作真正的会分发到每台机器上,并且拥有容错机制。

在物理存储中,每个分区指向一个存储在内存或者硬盘中的数据块 (Block) ,其实这个数据块就是每个 task 计算出的数据块,它们可以分布在不同的节点上。

所以,RDD 只是抽象意义的数据集合,分区内部并不会存储具体的数据,只会存储它在该 RDD 中的 index,通过该 RDD 的 ID 和分区的 index 可以唯一确定对应数据块的编号,然后通过底层存储层的接口提取到数据进行处理。

在集群中,各个节点上的数据块会尽可能的存储在内存中,只有当内存没有空间时才会放入硬盘存储,这样可以最大化的减少硬盘 IO 的开销。

2. 不可变

不可变性是指每个 RDD 都是只读的,它所包含的分区信息是不可变的。由于已有的 RDD 是不可变的,所以我们只有对现有的 RDD 进行转化 (Transformation) 操作,才能得到新的 RDD ,一步一步的计算出我们想要的结果。

这样会带来这样的好处:我们在 RDD 的计算过程中,不需要立刻去存储计算出的数据本身,我们只要记录每个 RDD 是经过哪些转化操作得来的,即:依赖关系,这样一方面可以提高计算效率,一方面是错误恢复会更加容易。如果在计算过程中,第 N 步输出的 RDD 的节点发生故障,数据丢失,那么可以根据依赖关系从第 N-1 步去重新计算出该 RDD,这也是 RDD 叫做"弹性"分布式数据集的一个原因,也会容错机制。

3. 并行操作

因为 RDD 的分区特性,所以其天然支持并行处理的特性。即不同节点上的数据可以分别被处理,然后生成一个新的 RDD。

三、RDD的操作

分为两种transformation和action

四、RDD 的结构

每个 RDD 里都会包括分区信息、依赖关系等

五、依赖关系

窄依赖、宽依赖。

依赖关系,记录了该 RDD 的计算过程,也就是说这个 RDD 是通过哪个 RDD 经过怎么样的转化操作得到的。窄依赖允许子 RDD 的每个分区可以被并行处理产生,而且支持在同一个节点上链式执行多条指令,无需等待其它父 RDD 的分区操作。

Spark 区分宽窄依赖的原因有两点:

  1. 窄依赖支持在同一节点上进行链式操作。相反,款依赖需要所有父分区都是可用的。
  2. 从失败恢复的角度考虑,窄依赖失败恢复更有效,因为只要重新计算丢失的父分区即可,而宽依赖涉及到 RDD 的各级多个父分区。

六、RDD和DataFrame的区别

DataFrame:DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得SparkSQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。

RDD:无从得知所存数据元素的具体内部结构,Spark Core只能在stage层面进行简单、通用的流水线优化。

什么是RDD?RDD的特点?RDD与Dataframe的关系?相关推荐

  1. Spark RDD使用详解--RDD原理

    RDD简介 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(Resilient Distributed Dataset,RDD).RDD是Spark的最基本抽象,是对分布式内存的抽象使 ...

  2. RDD的依赖关系、窄依赖、宽依赖、RDD的缓存、RDD缓存方式、DAG的生成、RDD容错机制之Checkpoint

    1.RDD的依赖关系 RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency). 1.1.窄依赖 窄依赖指的是每一 ...

  3. Spark报错It appears that you are attempting to broadcast an RDD or reference an RDD from an action

    Spark报错: Exception: It appears that you are attempting to broadcast an RDD or reference an RDD from ...

  4. 详解RDD基本概念、RDD五大属性

    一.RDD是什么 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合.RDD ...

  5. Spark RDD概念学习系列之RDD的重要内部属性(十五)

    RDD的重要内部属性 通过 RDD 的内部属性,用户可以获取相应的元数据信息.通过这些信息可以支持更复杂的算法或优化. 1)分区列表:通过分区列表可以找到一个 RDD 中包含的所有分区及其所在地址. ...

  6. Spark RDD概念学习系列之rdd持久化、广播、累加器(十八)

    1.rdd持久化 2.广播 3.累加器 1.rdd持久化 通过spark-shell,可以快速的验证我们的想法和操作! 启动hdfs集群 spark@SparkSingleNode:/usr/loca ...

  7. java rdd hashmap_利用Spark Rdd生成Hfile直接导入到Hbase详解

    针对大批量插入Hbase的场景,如果单条记录插入的时候效率比较低下,如果可以利用Rdd生成Hfile的话,然后利用Bulk Load导入Hfile的话,则会大大提升导入的速度,废话不说,直接上代码: ...

  8. spark输出rdd数据_Spark中RDD的详解

    (collect 收集 //将rdd分布式存储在集群中不同分区的数据 获取到一起 组成一个数组返回 //要注意 这个方法将会把所有数据搞到一个机器内 容易造成内存的溢出 在生产环境下千万慎用 rdd. ...

  9. 2021年大数据Spark(二十五):SparkSQL的RDD、DF、DS相关操作

      目录 RDD.DF.DS相关操作 SparkSQL初体验 SparkSession 应用入口 获取DataFrame/DataSet 使用样例类 指定类型+列名 自定义Schema ​​​​​​​ ...

最新文章

  1. mac cad石材填充图案_CAD超级填充教程
  2. “红人经济第一股”搞虚拟社交,天下秀是变道还是扩道?
  3. HBase 名称空间namespace的创建/建表/删除
  4. Scala入门到精通——第三节 Array、List
  5. 使用jquery的blockui插件显示弹出层
  6. BeanFactory 简介以及它 和FactoryBean的区别
  7. 面对颇有心机的同事要具备的四个心态
  8. 冬季旅游怎么搭?这样穿度假更休闲舒适
  9. 数学建模之预测模型简要分析
  10. Android 神兵利器之通过解析网页获取到的API数据合集,可拿来就用
  11. 沈阳python没有工作经验,沈阳python初级程序员培训班学费(python学历低可以学吗)...
  12. 个人收藏夹 html,用h1和段落p 写一个三毛语录
  13. 区块链ICO新加坡基金会法律意见书有哪些作用?
  14. 计算机的四个发展阶段的应用,计算机分为哪四个发展阶段
  15. VS2017操做sql server数据库
  16. 如何给win11安装安卓应用
  17. LAD原理(1)知识储备之函数和分布
  18. 台湾 天堂java 论坛_tiantangsifu_Rev1388jar_1386db java编写天堂私服*系统 - 下载 - 搜珍网...
  19. A Beginner‘s word
  20. arm linux死机不是崩溃,用sysrq-trigger实现ARM Linux一键内核崩溃、一键关机、一键dump信息等...

热门文章

  1. 陀螺专访 | 元征科技CIO:疫情加速维修行业数字化进程
  2. 触动精灵获取某东代付的链接
  3. 爬取中国空气质量在线监测分析平台
  4. lr增强细节_Lightroom 今起开启 AI 照片细节强化:画面清晰度提升 30%
  5. Cmake 命令语句(一)
  6. UI设计师主要做什么?如何学好UI设计
  7. Ubuntu服务器远程桌面分辨率低的解决办法
  8. 微信公众号代运营 2022年企业有必要运营公众号吗
  9. 如何用python 炒股赚钱_教程 | 如何用Python和机器学习炒股赚钱?
  10. 学习Qt的资源论坛博客等