我正在阅读一本火花书,很难理解下面的一句话。对我来说,我无法想象一个广泛依赖的案例,但我们不需要洗牌。谁能举个例子呢?
"在某些情况下,例如,当Spark已经知道数据以某种方式进行分区时,具有广泛依赖性的操作不会导致混乱。" - "高性能火花"作者:Holden Karau
答案 0 :(得分:3)
RDD依赖性实际上是根据分区以及如何创建分区。
注意:以下定义是为了便于理解:
如果RDD的每个分区仅从单个RDD的一个分区创建,则它是窄依赖。
另一方面,如果RDD中的分区是从多个分区(来自相同或不同的RDD)创建的,则它是广泛依赖。
只要创建分区所需的数据不在一个地方,就需要随机操作(这意味着必须从不同的位置/分区获取)。
如果数据已经分组在一个或多个分区中(使用groupBy,partitionBy等操作),则只需从每个分区中取出相应的项目并合并它们即可。在这种情况下,不需要随机播放。
有关详细信息,请参阅this,尤其是可视化示例图片。