当使用合并来减少分区时,在执行者之间一定会有一些数据移动,对吗?那么根据我的理解,这就是所谓的“shuffle”。如果这是“ Shuffle ”,为什么不会导致一个新的阶段?我看到有些文章说合并不能避免“ Shuffle ”,但它避免了“全面 Shuffle ”,那么“全面 Shuffle ”到底是什么呢?非常感谢!
gjmwrych1#
在合并的情况下,它会合并现有的分区以减少它们的数量,这意味着一些以前存在的分区将留在相同的执行器上,而其他分区将被 Shuffle 并与它们合并(因此只会发生部分 Shuffle )。当你想创建不同数量的分区时,重新分区会发生完全 Shuffle ,因此所有东西都需要从头开始创建并 Shuffle 。另外,在合并算法中,考虑了分区的局部性,因此在同一个执行器上的2个分区可以在不进行 Shuffle 的情况下进行压缩,但并不总是这样,所以这就是为什么要进行“部分 Shuffle ”。此外,coalesce并没有设计成一个新的阶段,它是一种元数据操作,描述了如何组合来自早期处理步骤的分区,但工作是由这些早期阶段完成的(在某些情况下是无意的)。
1条答案
按热度按时间gjmwrych1#
在合并的情况下,它会合并现有的分区以减少它们的数量,这意味着一些以前存在的分区将留在相同的执行器上,而其他分区将被 Shuffle 并与它们合并(因此只会发生部分 Shuffle )。当你想创建不同数量的分区时,重新分区会发生完全 Shuffle ,因此所有东西都需要从头开始创建并 Shuffle 。
另外,在合并算法中,考虑了分区的局部性,因此在同一个执行器上的2个分区可以在不进行 Shuffle 的情况下进行压缩,但并不总是这样,所以这就是为什么要进行“部分 Shuffle ”。
此外,coalesce并没有设计成一个新的阶段,它是一种元数据操作,描述了如何组合来自早期处理步骤的分区,但工作是由这些早期阶段完成的(在某些情况下是无意的)。