在用于连接策略的Spark源代码中,提到了广播哈希连接(BHJ)的代码注释:
完全外部联接不支持BHJ。对于正确的外部连接,我们 只能播放左侧。对于左外,左半,左反 和内部联接类型ExistenceJoin,我们只能广播 右边。对于内部喜欢的连接,我们可以广播双方。 通常,在以下情况下,BHJ的执行速度会比其他联接算法快 广播方面很小。但是,广播表是一个 网络密集型操作。可能会导致OOM或比 其他联接算法,尤其是在构建/广播端为 大。
您能否解释一下
所代表的代码注释是什么意思“内心的连接”
答案 0 :(得分:3)
根据a doc for the dataset join operators innerlike用于INNER和CROSS连接。
您还可以发现Spark SQL使用以下两个系列的 加入:
- 与内在和十字架的InnerLike
- 具有LeftSemi,LeftAnti和ExistenceJoin的LeftExistence
答案 1 :(得分:1)
最后在代码中找到:joinTypes.scala
InnerLike包括:内部联接和交叉联接。
sealed abstract class InnerLike extends JoinType {
def explicitCartesian: Boolean
}
case object Inner extends InnerLike {
override def explicitCartesian: Boolean = false
override def sql: String = "INNER"
}
case object Cross extends InnerLike {
override def explicitCartesian: Boolean = true
override def sql: String = "CROSS"
}