Spark join 和 groupBy 的比较

最近在使用spark2 的过程中,发现在join的过程中要产生shuffle。

而每一次的shuffle都会带来大量的cpu计算。


在后来,发现有一个需求:

表A 需要同时join 另外3张表,表B,表C,表D。join的字段是同一个。

方案一:

表A join 表B join 表C join 表D,发生了3次join。

 

方案二:

表A join (表B union 表C union 表D),当然有个前提,表B union 表C union 表D中union的字段必须一模一样。


当时也没有想到方案二,只是之前做Hadoop的时候,多张表关联的过程 有点类似,突然灵光一闪,想到了。

因为union是不会触发shuffle的,

然后修改代码 发现 使用方案二的速度 比 方案一 的速度 快了40%。

只是在使用过程中有限制,

一是 union的字段必须一模一样

二是 如果表B、C、D是非常巨大的表,不可行,三张超大表union之后 shuffle,可想而至 cpu的压力如何。

 

不过针对一般情况,方案二的效率 完败 方案一。

 

大家如果对 大数据岗位有意向 或者想了解spark 可以一起探讨,QQ:1729874221

你可能感兴趣的:(Spark join 和 groupBy 的比较)