Spark基础01-RDD和宽窄依赖

1、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

  • 译文:弹性分布式数据集(rdd)是Spark中的基本抽象。表示可以并行操作的、不可变的、分区元素集合

RDD官方解释

从上截图可看出,RDD除了提供基础的map、filter等方法以外,还隐式整合了其他操作,

  • 针对K-V类型的操作封装在org.apache.spark.rdd.PairRDDFunctions 下,例如:combineByKey、reduceByKey等
  • 针对Double数值类型的操作封装在org.apache.spark.rdd.DoubleRDDFunctions 下,例如:sum等
  • 针对SequenceFile文件类型的操作封装在org.apache.spark.rdd.SequenceFileRDDFunctions下,例如:saveAsSequenceFile等

2、RDD的特性

RDD特性

  • a list of partitions :由一个或多个分区组成的列表
  • a function for computing each split : 一个函数计算每一个分片,RDD的每个partition上面都会有function
  • a list of dependencies on other RDDs:RDD会记录它的依赖 ,依赖还具体分为宽依赖和窄依赖,用于容错
  • a Partitioner for Key-value RDDs:如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区
  • a list of preferred locations to compute each split on:去最优的位置计算,计算向数据移动
  • 从以上五个特性可以总结的特点:
    1. 不可变的,已分区的集合对象
    2. 可以通过并行转换方式来创建,如:map、filter
    3. 失败自动重建
    4. 可控制存储级别(内存,磁盘等)用于容错重算
    5. 必须是可序列化
    6. 静态类型

3、宽窄依赖

  • 窄依赖(NarrowDependency)

窄依赖

  • 官方解释为:Base class for dependencies where each partition of the child RDD depends on a small number of partitions of the parent RDD. Narrow dependencies allow for pipelined execution

  • 译文:依赖项的基类,其中子RDD的每个分区依赖于父RDD的少量分区。狭窄的依赖关系允许管道执行

  • 其中窄依赖相同包下存在两个具体实现的子类,OneToOneDependency和RangeDependency

  • 宽依赖(ShuffleDependency)

宽依赖

  • 官方解释为:Represents a dependency on the output of a shuffle stage. Note that in the case of shuffle, the RDD is transient since we don’t need it on the executor side
  • 译文:表示对洗牌阶段输出的依赖关系。注意,在shuffle的情况下,rdd是短暂的,因为我们不需要它在执行者端

RDD依赖关系

  • 总结:
    • spark中的依赖是由org.apache.spark.Dependency来进行控制的,其下存在两个子类分别对应着窄依赖【NarrowDependency】和宽依赖【ShuffleDependency】
    • NarrowDependency是一个抽象类,具体实现类是OneToOneDependency和RangeDependency
      • OneToOneDependency:依赖的父RDD分区只有一个
      • RangeDependency:依赖的父RDD分区有多个
    • ShuffleDependency就是其他各类文章所说的宽依赖,笔者推荐介绍spark依赖关系的时候,将宽依赖改称为ShuffleDependency更为准确
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值