Spark 中的广播哈希联接和广播嵌套循环联接有什么区别?

2024-03-24

Spark 中的广播哈希联接和广播嵌套循环联接有什么区别? 在哪种情况下 Spark 会选择哪个更快?


您可以从源代码中获取一些信息:https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala#L111 https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkStrategies.scala#L111

广播哈希连接(BHJ):仅支持等连接,而连接键不需要可排序。支持除完整外连接之外的所有连接类型。巴赫杰 当以下情况时,通常比其他连接算法执行得更快 广播面较小。然而,广播表是一个 网络密集型操作,可能会导致 OOM 或性能不佳 在某些情况下,尤其是当构建/广播方面很大时。

广播嵌套循环连接(BNLJ):支持等值连接和非等值连接。 支持所有连接类型,但实现针对以下方面进行了优化: 1) 广播右外连接中的左侧; 2) 在左外、左半、左反或存在连接中广播右侧; 3) 在内部连接中广播任一侧。 对于其他情况,我们需要多次扫描数据,这可能会相当慢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 中的广播哈希联接和广播嵌套循环联接有什么区别? 的相关文章

随机推荐