摘要
- 问题:
spark
中, union
方法是否重新分区, 是否会触发shuffle
- 结论: 不会
shuffle
, 不会划分stage
, 但是可能重新分区(窄依赖)
- 解释:
(1) 宽窄依赖对应的原称为ShuffleDependency
和NarrowDependency
, 字面上可以看出来, 只有宽依赖才会发生shuffle
. 但是两种依赖都会重新分区, 因此重分区和是否shuffle
没有关系
(2) 如果被union
的多个rdd
, 分区规则相同, 那么index
相同的分区, 会被整合到多数分区所在的节点. 比如a
节点有2
个index
为0
的分区, b
节点有1
个, union
之后的0
分区会全部转移到a
节点
(3) 如果分区规则不同, union
后生成的UnionRDD
, 不会进行重新分区, 而是把每个分区合并记录到分区数组中
union
方法
// 调用sparkContent的方法, 把this作为参数传进去. 基本操作
def union(other: RDD[T]): RDD[T] = withScope {
sc.union(this, other)
}
// 实际调用了重载方法
def union[T: ClassTag](first: RDD[