Rdd成员变量Dependency介绍(类型及其如何被初始化)
来源:互联网 发布:虚拟机与主机网络连接 编辑:程序博客网 时间:2024/06/02 19:43
Dependency的类型
rdd的Dependency分NarrowDependency和ShuffleDependency两种。
1 NarrowDependency:一个Parent RDD的数据经过处理之后,只能传递到一个Child RDD,它又分为:
a. OneToOneDependency:MapPartitionsRDD、HadoopRDD的依赖,这种依赖Parent RDD和Child RDD是1对1的关系
b. RangeDependency:UnionRDD的依赖,这种依赖是多个Parent RDD对应1个Child RDD
2 ShuffleDependency: 一个Parent RDD的数据经过处理之后,传递给多个Child RDD,ShuffledRDD的依赖就是这种类型。
rdd的dependencies是如何初始化的:
rdd都继承自 class RDD,来看下它的主构造函数:
abstract class RDD[T: ClassTag]( @transient private var _sc: SparkContext, // 参数deps即该rdd的依赖s @transient private var deps: Seq[Dependency[_]] ) extends Serializable with Logging
rdd的依赖应该都来自这个deps了,那deps怎么来的呢,以rdd.map来看下:
// 以 rdd_A.map(...) 为例def map[U: ClassTag](f: T => U): RDD[U] = withScope { val cleanF = sc.clean(f) // 新建 MapPartitionsRDD 对象,将 rdd_A 本身作为第一个参数 new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.map(cleanF)) }
再看MapPartitionsRDD的定义(主构造函数):
private[spark] class MapPartitionsRDD[U: ClassTag, T: ClassTag]( prev: RDD[T], f: (TaskContext, Int, Iterator[T]) => Iterator[U], preservesPartitioning: Boolean = false) extends RDD[U](prev)
MapPartitionsRDD 第一个参数prev来自父类RDD,构造 MapPartitionsRDD 时先调用 super(prev), 即调RDD的构造函数。
super(prev)
=> 调 RDD私有构造函数:
// oneParent 即rdd_A对象def this(@transient oneParent: RDD[_]) = this( oneParent.context , List(new OneToOneDependency(oneParent)))
=> 调 RDD主构造函数:
RDD[T: ClassTag]( @transient private var _sc: SparkContext, @transient private var deps: Seq[Dependency[_]])
可以看到rdd_A对象被封装为List传入RDD主构造函数,的第二个参数即其 deps ;
再看 r.dependencies 方法:
final def dependencies: Seq[Dependency[_]] = { checkpointRDD.map(r => List(new OneToOneDependency(r))).getOrElse { if (dependencies_ == null) { // 这里即返回 RDD 主构造函数参数 deps ; dependencies_ = getDependencies } dependencies_ } }
0 0
- Rdd成员变量Dependency介绍(类型及其如何被初始化)
- 如何初始化引用类型的成员变量
- 静态成员变量的初始化,vector类型变量初始化
- c++ private static 成员变量如何初始化?
- c++数据成员变量初始化顺序问题及特殊成员变量类型初始化
- 构造函数及其成员变量初始化顺序详解
- 类中静态成员变量(结构体或者简单类型)的初始化
- C++中各种类型的成员变量的初始化方法(mark-好)
- C++中各种类型的成员变量的初始化方法(转)
- C++中各种类型的成员变量的初始化方法(ZZ)
- C++中各种类型的成员变量的初始化方法(mark-好)
- C++中各种类型的成员变量的初始化方法(mark-好)
- C++中各种类型的成员变量的初始化方法(mark-好)
- C++中各种类型的成员变量的初始化方法
- C++中各种类型的成员变量的初始化方法
- C++中各种类型的成员变量的初始化方法
- C++中各种类型的成员变量的初始化方法
- C++中各种类型的成员变量的初始化方法
- 装饰者设计模式
- 计算机系统分类
- Retrofit初探——POST方式提交JSON数据
- Mysql的优化和架构浅析
- 279. Perfect Squares
- Rdd成员变量Dependency介绍(类型及其如何被初始化)
- tips:js没有块级作用域。
- Android UI开发第二十六篇——Fragment间的通信
- 二阶魔方还原教程
- 对话框弹出(Bootstrap)
- 利用Python爬虫获取IP2Location定位数据
- 392.House Robber-打劫房屋(中等题)
- C++虚函数和虚继承浅析
- Fragment之间的通信