sparksql中有一些容易混淆的概念,大家在面试时也会经常被问到join和shuffle相关的问题:
-
说说join的几种实现
-
说说shuffle的实现
-
join操作一定发生shuffle吗?
-
spark shuffle 2.0以上已经不用hash shuffle了,那join的时候还用hash join 么?
-
...
想要弄清楚这些,就得搞清楚sparksql中join的具体实现有哪些?shuffle又有哪些?他们之间的关系又是什么?
sparksql中的join
BaseJoinExec是sparksql中join实现的基类。
sparksql中,join有六种实现方式:
-
SortMergeJoinExec
-
ShuffledHashJoinExec
-
BroadcastHashJoinExec
-
BroadcastNestedLoopJoinExec
-
CartesianProductExec
具体特点及分发类型如下图: