今天朋友抛出一个很有意思的结论: shuffle 不一定产生宽依赖,但是宽依赖一定是由 shuffle 产生的。 我想了好久,有没有这种情况,在极端情况下,就算使用了 shuffle 算子,父子 rdd 的 partition 依然是一对一的关系,这样实际就没有形成宽依赖虽然使用了 shuffle 算子。 熟悉 spark 的大佬,谁对这一块比较熟,不吝赐教!
1
bsidb 2019-01-19 21:02:46 +08:00
当两个参加 join 的 RDD 的 partitioner 是同一个对象时,会产生窄依赖而不是宽依赖。在这种情况下,两个 RDD 之间只要对应的 partition 互相 join 即可,不会产生宽依赖问题。
RDD 的 partitioner 有专门的 API 设置,不设置则为 None。 |
2
belcher OP @bsidb 我懂了,分区规则一样,join 的时候 partition 就不存在一对多的情况了,也就是 shuffle 算子不一定产生宽依赖。那么,宽依赖一定是由 shuffle 产生的,这句话是对的么,有没有特例?
|
3
cyspy 2019-01-20 00:18:35 +08:00
shuffle 是用来解决宽依赖问题的一个方法,而可能产生宽依赖的算子就可以叫做 shuffle 算子。
|
4
jakson 2019-01-20 22:23:59 +08:00
个人看法:
shuffle 一定是宽依赖,源码中对宽窄依赖,是根据算子的名称来定的(我记得源码里面是这样的,宽窄依赖也是这样定的)。 他的意思是即使是宽依赖,但不一定会有数据的网络传输吧 |