Spark的RDD概述

弹性分布式数据集(RDDS)---RDD是只读的、分区记录的集合,只支持粗粒度转换,即在大量记录上执行的单个操作。

Spark 主要以一个弹性分布式数据集(RDD)的概念为中心,它是一个容错且可以执行并行操作的元素的集合。

1、RDD的五个特征:

①分区:有一个数据分片列表,能够将数据进行切分,切分后的数据能够进行计算,是数据集的原子组成部分。

②函数:计算每个分片,得出一个可遍历的结果,用于说明在父RDD上执行何种计算。

③依赖:计算每个RDD对父RDD的依赖列表,源RDD没有依赖,通过依赖关系描述血统。

④优先位置:每一个分片的优先计算位置

⑤分区策略:描述分区模式饥饿数据存放的位置,k-v的RDD根据哈希值进行分区,类似于MR的Partitioner接口,根据key来决定分配位置。

2、RDD的依赖

Spark中的依赖关系主要体现为两种形式,宽依赖和窄依赖,其本质区别是是否发生shuffle。

窄依赖:父RDD的每一个分区最多被一个子RDD的分区所用,表现为一个父RDD的分区对应一个子RDD的分区,或多个父RDD的分区对应一个子RDD的分区,也就是说一个父RDD的一个分区不可能对应一字子RDD的多个分区。

宽依赖:子RDD的每个分区都依赖于所有父RDD的所有或多个分区,也就是说存在一个父RDD的一个分区对应一个子RDD的多个分区。


3、RDD的创建

有两种方法可以创建 RDD : 在你的 driver program(驱动程序)中 parallelizing 一个已存在的集合,或者在外部存储系统中引用一个数据集,例如,一个共享文件系统,HDFS,HBase,或者提供 Hadoop InputFormat 的任何数据源。

(SparkContext).makeRDD

(SparkContext).parallelize

(SparkContext).textFile

4、RDD的操作

RDDS 支持两种类型的操作 :

①transformations(转换):在一个已存在的 dataset 上创建一个新的 dataset。

②actions(动作): 将在 dataset 上运行的计算结果返回到驱动程序。

Spark 中的所有 transformations 都是 lazy(懒加载的),因此它不会立刻计算出结果。相反,他们只记得应用于一些基本数据集(例如 : 文件)的转换。只有当需要返回结果给驱动程序时,transformations 才开始计算。这种设计使 Spark 的运行更高效。例如,我们可以意识到,map 所创建的数据集将被用在 reduce 中,并且只有 reduce 的计算结果返回给驱动程序,而不是映射一个更大的数据集。

默认情况下,每次你在 RDD 运行一个 action 的时, 每个 transformed RDD 都会被重新计算。但是,您也可用 persist (或 cache) 方法将 RDD persist(持久化)到内存中;在这种情况下,Spark 为了下次查询时可以更快地访问,会把数据保存在集群上。此外,还支持持续持久化 RDDs 到磁盘,或复制到多个结点。

5、DAG的生成

原始的RDD经过一系列转换就形成了DAG图。在Spark中,DAG绘制完毕不会被立即执行,而是仅仅对数据集进行标记。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值