RDD

RDD

  1. RDD(Resilient Distributed Dataset)弹性分布数据集,是Spark中最基本的数据抽象。

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

    本质上是一组分布式的 JVM 不可变对象集合,不可变决定了它是只读的,所以 RDD 在经过变换产生新的 RDD 时,原有 RDD 不会改变

    可以简单的理解为RDD就是一种高级的数据抽象(数据模型)、一种高级的数据结构,是对数据的高级封装,其本质上就是一个类,一个对象,所谓的Spark编程也是围绕底层RDD这一数据结构而操作,因此掌握RDD非常重要。

    RDD 是分区的集合,本质上还是一个类,所以在理解时,你可以用分区之类的概念去理解,但是在使用时,就可以忘记这些,把其当做是一个普通的集合。 (Scala是基于java开发的,所以万物的本质都是类)

在这里插入图片描述

  1. 重点:里面的元素可并行计算的集合。也就是说 RDD算子处理的是集合里的元素 ,也就是说我们传进去的一定是一个集合, 集合是不可变的immutable,可以分区,而且集合中的元素可以计算。

  2. 集合里面的元素可并行计算, 算子处理完返回值是一个新的RDD。RDD是一个新的集合(本质是一个抽象类,抽象类里面封装了很多方法(就是我们的算子)),每次算子处理完成后,返回成一个新的RDD又可以调用其他算子进行处理。所以算子就是RDD里面的方法,每次调用返回一个新的RDD,又可以调用方法。

  3. Spark是由Scala编写的,在Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质。我们主要运用到的是Seq类型{主要包含: Array, String, List 都是继承于Seq }

  4. RDD算子主要是针对这三种集合: Array, String, List 中的元素进行处理

  5. RDD就类似于我们之前写的MapReduce程序, 一组数据过来, 计算完成传给下一个RDD, 类似于DAG有向导图

  6. RDD计算是基于内存的,计算完的结果不落盘, 直接给下一个RDD, 或者遇到行动算子(collect) 将结果返回到Driver

  7. 所有RDD算子相关操作都在Executor上执行, RDD算子之外的操作都在Driver上执行

  8. RDD不保存数据,只封装了数据处理逻辑,而且RDD计算都是延迟计算,在Spark中,只有遇到action等行动算子,才会执行RDD的计算(即延迟计算)

  9. textFile(“文件路径”) 也是懒加载,只有正真调用的时候才开始读取文件中数据,textFile方法底层封装的是***读取MR读取文件的方式***,读取文件之前先split,默认split大小是一个block大小

1弹性

​ 存储的弹性:内存与磁盘的自动切换;

​ 容错的弹性:数据丢失可以自动恢复;

​ 计算的弹性:计算出错重试机制;

​ 分片的弹性:可根据需要重新分片

2分布式

​ 数据存储在大数据集群不同节点上

3)数据集,不存储数据**

​ RDD封装了计算逻辑,并不保存数据

4数据抽象

​ RDD是一个抽象类,需要子类具体实现。

​ abstract class RDD

5不可变

RDD封装了计算逻辑,是不可以改变的,想要改变,只能产生新的RDD,在新的RDD里面封装计算逻辑

6可分区、并行计算

在这里插入图片描述

RDD五大特征

在这里插入图片描述

A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable,partitioned collection of elements that can be operated on in parallel. This class contains the basic operations available on all RDDs, such as `map`, `filter`, and `persist`. 


* Internally, each RDD is characterized by five main properties:
*
*  1- A list of partitions
*  2- A function for computing each split
*  3- A list of dependencies on other RDDs
*  4- Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
*  5- Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

代码中是一个抽象类,包含这五大基本特征

每个 RDD 都有如下几个成员:

  • ​ 分区的集合;(partition)
  • ​ 用来基于分区进行计算的函数(算子);
  • ​ 依赖(与其他 RDD)的集合;
  • ​ 对于键-值型的 RDD 的散列分区器(可选);
    ;(partition)
  • ​ 用来基于分区进行计算的函数(算子);
  • ​ 依赖(与其他 RDD)的集合;
  • ​ 对于键-值型的 RDD 的散列分区器(可选);
  • ​ 对于用来计算出每个分区的地址集合(可选,如 HDFS 上的块存储的地址)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值