最近在使用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