Spark 的 Join 类型

Shuffled Hash Join

Spark 默认的 Join 类型是 Shuffled Hash Join

Shuffled Hash Join 分为两个阶段:

Shuffle:

将具有相同 key 值的数据分配到同一个分区中

Join:

在本地,对数据集执行 join

Sort Merge Join

Sort Merge Join

Sort Merge Join 分为两个阶段:

Sort:

对 key 值进行排序,在相同区间的数据分配到同一个分区中

Merge:

在本地,对数据集执行 merge

Broadcast Join

当连接操作一边数据源的大小小于 spark.sql.autoBroadcastJoinThreshold 配置大小,Spark SQL 使用 Broadcast Join 替代 Shuffled Hash Join 来优化连接查询

spark.sql.autoBroadcastJoinThreshold 默认为 10M

spark.sql.autoBroadcastJoinThreshold 值为 -1 时,禁用该功能

或者使用 broadcast 方法来显式标识需要广播的数据源:

userDF.join(broadcast(cityDF), userDF.column("city_id") === cityDF.column("id"))