Spark Join原理是什么

技术Spark Join原理是什么这篇文章将为大家详细讲解有关Spark Join原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。数据分析中将两个数据集进行 Jo

本文将详细讲解什么是Spark Join原理,文章内容质量较高,所以边肖将分享给大家参考。希望你看完这篇文章后有所了解。

JoJoining在数据分析中连接两个数据集是非常常见的场景。在Spark的物理规划阶段,Spark的Join Selection类会根据Join提示策略、Join表的大小、Join是否相等、Join涉及的键是否可以排序来选择最终的Join策略。最后,Spark将使用选定的连接策略来执行最终计算。Spark目前支持五种加入策略:

广播散列连接(BHJ)

无序散列连接(SHJ)

无序排序合并连接(SMJ)

洗牌复制嵌套循环连接,也称为笛卡尔乘积连接。

广播嵌套循环连接(BNLJ)

其中,BHJ和SMJ的加盟策略是我们经营Spark工作最常见的。JoinSelection将首先根据连接的键从广播散列连接、随机散列连接和随机排序合并连接中选择一个作为等价连接;如果联接的键是不等联接或未指定联接条件,将选择广播嵌套循环联接或随机复制嵌套循环联接。不同的Join策略在执行效率上有很大的差异,因此需要了解每个Join策略的执行过程和适用条件。

1、Broadcast Hash Join

广播散列连接的实现是将小表的数据广播给Spark的所有执行器。这个广播过程与我们自己广播数据没有什么不同:

使用collect操作符将小表的数据从executor拉至Driver,调用Driver上的sparkContext.broadcast向所有Executor广播,并使用广播数据加入Executor上的大表(实际上是执行映射操作)。

这种连接策略避免了洗牌操作。一般来说,广播散列连接将比其他连接策略执行得更快。

Spark  Join原理是什么

要使用此连接策略,必须满足以下条件:小表的数据必须非常小,这可以通过spark . SQL . autobroadcastjointhreshold参数进行配置。默认值为10MB。如果内存比较大,可以适当提高阈值。将spark . SQL . autobroadcastjointhreshold参数设置为-1,可以关闭。此连接方法只能用于相等联接,参与联接的键不需要可排序。

2、Shuffle Hash Join

当表中的数据很大,不适合广播时,此时可以考虑使用Shuffle Hash Join。混洗散列连接也是连接大表和小表时选择的一种策略。其计算思路是:按照相同的分区算法和分区号(根据参与Join的键进行分区)对大表和小表进行分区,从而保证哈希值相同的数据分布到同一个分区,然后同一个Executor中两个表的哈希值相同的分区可以在本地进行哈希Join。在加入之前,将为小表的分区构建一个哈希映射。Shuffle hash join利用分治的思想,将大问题分解成小问题来解决。

理是什么">

要启用 Shuffle Hash Join 必须满足以下条件: 仅支持等值 Join,不要求参与 Join 的 Keys 可排序 spark.sql.join.preferSortMergeJoin 参数必须设置为 false,参数是从 Spark 2.0.0 版本引入的,默认值为 true,也就是默认情况下选择 Sort Merge Join 小表的大小(plan.stats.sizeInBytes)必须小于 spark.sql.autoBroadcastJoinThreshold * spark.sql.shuffle.partitions(默认值200) 而且小表大小(stats.sizeInBytes)的三倍必须小于等于大表的大小(stats.sizeInBytes),也就是 a.stats.sizeInBytes * 3 < = b.stats.sizeInBytes

3、Shuffle Sort Merge Join

前面两种 Join 策略对表的大小都有条件的,如果参与 Join 的表都很大,这时候就得考虑用 Shuffle Sort Merge Join 了。 Shuffle Sort Merge Join 的实现思想: 将两张表按照 join key 进行shuffle,保证join key值相同的记录会被分在相应的分区 对每个分区内的数据进行排序 排序后再对相应的分区内的记录进行连接 无论分区有多大,Sort Merge Join都不用把一侧的数据全部加载到内存中,而是即用即丢;因为两个序列都有序。从 头遍历,碰到key相同的就输出,如果不同,左边小就继续取左边,反之取右边。从而大大提高了大数据量下sql join 的稳定性。

Spark Join原理是什么

要启用 Shuffle Sort Merge Join 必须满足以下条件:

仅支持等值 Join,并且要求参与 Join 的 Keys 可排序

4、Cartesian product join

如果 Spark 中两张参与 Join 的表没指定连接条件,那么会产生 Cartesian product join,这个 Join 得到的结果其实

就是两张表行数的乘积。

5、Broadcast nested loop join

可以把 Broadcast nested loop join 的执行看做下面的计算:

for record_1 in relation_1:

for record_2 in relation_2:

join condition is executed

可以看出 Broadcast nested loop join 在某些情况会对某张表重复扫描多次,效率非常低下。从名字可以看出,这种

join 会根据相关条件对小表进行广播,以减少表的扫描次数。

Broadcast nested loop join 支持等值和不等值 Join,支持所有的 Join 类型。 

关于Spark Join原理是什么就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/133179.html

(0)

相关推荐

  • MySQL源代码目录有哪些

    技术MySQL源代码目录有哪些这篇文章主要介绍了MySQL源代码目录有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、源代码目录介绍:1、BUILD

    攻略 2021年11月1日
  • 如何使用mysqldump备份异机恢复数据库

    技术如何使用mysqldump备份异机恢复数据库这篇文章给大家分享的是有关如何使用mysqldump备份异机恢复数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用mysqldump备份异

    攻略 2021年11月2日
  • 山西有什么山,山东、山西的山指的是什么

    技术山西有什么山,山东、山西的山指的是什么山东因居太行山以东而得名山西有什么山,简称“鲁”,山西在太行山以西简称“晋”。这个说法对于三晋大地和齐鲁大地的广大群众而言,可谓人尽皆知。但看看地图就知道,山西和山东中间咋还夹着

    生活 2021年10月26日
  • 7272好看动漫排行,欧美新番女性最新排行是怎样的

    技术7272好看动漫排行,欧美新番女性最新排行是怎样的近日,外媒Anime Trending公布了关于“2020年春季新番动画第三周女性角色人气排行榜”,简单来说就是本周的“老婆榜”,想知道自己“老婆”的人气在欧美那边高

    生活 2021年10月26日
  • 如何修改cocosbuilder文件数目的限制

    技术如何修改cocosbuilder文件数目的限制这篇文章将为大家详细讲解有关如何修改cocosbuilder文件数目的限制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下载 coco

    攻略 2021年11月19日
  • ORM-mysql

    技术ORM-mysql ORM-mysql创建表,需要手动先创建数据库from sqlalchemy.ext.declarative import declarative_base
    from sqlal

    礼包 2021年12月20日