gpt4 book ai didi

apache-spark - 为什么Spark Planner偏爱排序合并联接而不是随机哈希联接?

转载 作者:行者123 更新时间:2023-12-03 11:10:21 25 4
gpt4 key购买 nike

为什么Spark 2.3中的Spark Planner首选排序合并联接而不是经过改组的哈希联接?换句话说,为什么spark.sql.join.preferSortMergeJoin配置属性internal and turned on by default?乱序的哈希联接有什么问题?这是Spark特有的,它以分布式方式进行计算还是联接算法中更固有的功能?

您可以找到JoinSelection执行计划策略herehere中使用的属性,如下所示:

case ... if !conf.preferSortMergeJoin && ... =>
Seq(joins.ShuffledHashJoinExec(...))

最佳答案

为了回答你的问题


乱序的哈希联接有什么问题?


我将首先提供一些上下文。



根据SPARK-11675的说明,Spark 1.6中删除了Shuffled Hash Join,其原因是


...我认为我们现在应该仅对大型联接的排序合并联接进行标准化,并在将来需要时创建更好的哈希联接实现


并根据SPARK-13977在Spark 2.0中重新引入,因为


ShuffledHashJoin在以下情况下仍然有用:

1)构建端的任何分区都可以容纳在内存中

2)构建方比流方小得多,较小方的构建哈希表应比排序较大方快。


值得一提的是SPARK-13​​977的PR,指出删除了Shuffled Hash Join,转而使用Sort Merge Join,它更快,更可靠。



我不确定排序合并联接比随机排序哈希联接快多少,但是它的定义确实更强大,因为随机哈希联接要求哈希表适合内存,与可能溢出到磁盘的排序合并联接相反。

关于apache-spark - 为什么Spark Planner偏爱排序合并联接而不是随机哈希联接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50019457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com