join的spark操作啥时候不会造成shuffle

Posted

技术标签:

【中文标题】join的spark操作啥时候不会造成shuffle【英文标题】:When will the spark operation of join does not cause shufflejoin的spark操作什么时候不会造成shuffle 【发布时间】:2017-05-12 14:52:07 【问题描述】:

一般来说,Spark的join操作会造成shuffle。而join的操作什么时候不会造成shuffle呢?谁能告诉我一些针对 Spark 进行优化的方法?

【问题讨论】:

【参考方案1】:

如果两个数据结构(DatasetRDD)已经共同分区,join 将不会直接导致 shuffle。这意味着数据已经用repartition / partitionBy 洗牌或者聚合和分区方案兼容(相同的分区键和分区数)。

join 不会导致网络流量,如果两个结构都是共同分区和共同定位。由于只有在数据之前已经在相同的操作中洗牌时才会发生协同定位,所以这是一种边界情况。

当加入表示为广播加入时,也不会发生随机播放。

【讨论】:

以上是关于join的spark操作啥时候不会造成shuffle的主要内容,如果未能解决你的问题,请参考以下文章

Spark性能优化--数据倾斜调优与shuffle调优

spark shuffle(ExchangeExec)过多导致任务运行过慢甚至超时

Spark调优小表join大表数据倾斜解决方案

Spark task的输入太大如何分割?

Spark:加入时设置最大分区大小

spark源码阅读--shuffle过程分析