我在多个论坛上读到过这样一篇文章:当底层表被压缩和排序时,在执行sort-merge-join时,shuffle会减少。不过,我的问题是
排序的bucket只能保证bucket中的数据是大致相同的一组键,并且数据是经过排序的。假设我们有两个Dataframed1和d2,这两个Dataframe都被排序和装箱。
spark是否保证包含key1和key2数据的d1表的bucketx与包含key1和key2数据的d2表的buckety在同一台机器上?
若bucketx和buckety保证在同一台机器上,那个么在执行sort merge join时,节点之间就不会有交换。如果他们能坐在不同的机器上。然后在执行join时应该进行数据交换。
请帮助理解这个概念。提前谢谢。
1条答案
按热度按时间vohkndzv1#
你的理解是正确的。
SortMergeJoin
要求RangePartitioning
大量的数据。如果Dataframedf1和df2已经被
RangePartitioner
on键k
(也用于join)那么就不会有额外的交换,否则就会有。