Jac*_*ski 8 join apache-spark apache-spark-sql
为什么Spark 2.3中的Spark Planner更喜欢通过混洗散列连接进行排序合并连接?换句话说,为什么spark.sql.join.preferSortMergeJoin配置属性是内置的并且默认打开?混乱散列连接有什么问题?这是Spark特有的,它是以分布式方式进行计算还是在连接算法中更固有的其他东西?
您可以在使用的属性JoinSelection执行规划策略在这里和这里,看起来像:
case ... if !conf.preferSortMergeJoin && ... =>
Seq(joins.ShuffledHashJoinExec(...))
Run Code Online (Sandbox Code Playgroud)
Pan*_*nos 12
为了回答你的问题
混乱散列连接有什么问题?
我先提供一些背景信息.
根据SPARK-11675,在Spark 1.6中删除了Shuffled Hash Join,原因是
...我认为我们现在应该为大型连接标准化排序合并连接,并在将来需要时创建更好的散列连接实现
并根据SPARK-13977重新引入Spark 2.0,因为
在以下情况下,ShuffledHashJoin仍然有用:
1)构建端的任何分区都可以适合内存
2)构建方面比流方小得多,较小侧的构建哈希表应该比对较大方进行排序要快.
值得一提的PR,其指向的是打乱哈希联接赞成取出的排序合并连接这是SPARK-13977 更快和更稳健.
我不确定排序合并加入与Shuffled Hash Join相比有多快,但它的定义更加强大,因为Shuffled Hash Join需要散列表适合内存,与Sort Merge Join相反,它可以溢出到磁盘.
| 归档时间: |
|
| 查看次数: |
3851 次 |
| 最近记录: |