Spark 中是否总是同时发生广泛依赖和随机播放?

Do wide dependency and shuffle always occur at the same time in Spark?

我正在看一本spark book,下面一句话几乎看不懂。对我来说,我无法想象一个广泛依赖的情况,但我们不需要洗牌。谁能给我举个例子吗?

"In certain instances, for example, when Spark already knows the data is partitioned in a certain way, operations with wide dependencies do not cause a shuffle." -- "High Performance Spark" 作者:霍尔顿·卡劳

RDD 依赖实际上是在分区和分区创建方式方面。

注:以下定义是为了便于理解:

如果一个 RDD 的每个分区都是从单个 RDD 的一个分区创建的,那么它是一个窄依赖

另一方面,如果一个 RDD 中的一个分区是由多个分区(来自相同或不同的 RDD)创建的,那么它是一个 wide dependency.

需要Shuffle操作当创建分区所需的数据不在一个地方时(也就是说,它必须从不同的locations/partitions中获取)。

如果数据已经分组到一个或多个分区中(使用 groupBy、partitionBy 等操作),您只需从每个分区中取出相应的项目并合并他们。在这种情况下,洗牌操作是不必要的。

有关详细信息,请参阅 this,尤其是视觉示例图像。