今天朋友抛出一个很有意思的结论: 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 一定是宽依赖,源码中对宽窄依赖,是根据算子的名称来定的(我记得源码里面是这样的,宽窄依赖也是这样定的)。 他的意思是即使是宽依赖,但不一定会有数据的网络传输吧 |