【大数据分析】Spark的joins研究
目录
- 概述
- join的类型
- Spark执行join的5种策略
- 各类join策略的优先级
概述
数据的join操作(数据连接)对于数据分析来说是非常重要的组成部分,不管是Spark Core还是Spark SQL都支持joins的相同基本类型。joins一种很常见,但又最容易造成性能问题的操作。因为它可能会造成大量的网络传输,尤其是当使用Spark Core组件的时候,因为DAG optimizer(DAG 优化器)无法对数据进行重排列(按照列)并且降低filters的复杂度。
join的类型
在输入数据集的记录之间应用连接条件之后,join类型会影响join操作的结果,假设有两个数据表A和B。
A表的数据如下:
Aid | Aname |
---|---|
1 | A1 |
2 | A2 |
3 | A3 |
4 | A4 |
5 | A5 |
6 | A6 |
7 | A7 |
8 | A8 |
9 | A9 |
B表的数据如下:
Bid | Bname |
---|---|
2 | 100 |
6 | 101 |
3 | 102 |
7 | 103 |
6 | 104 |
8 | 105 |
2 | 106 |
2 | 107 |
11 | 108 |
(1)内连接(join或inner join)。可获取两表公共部分的记录。SQL语句:select * from A JOIN B ON A.Aid=B.Bid
Aid | Aname | Bid | Bname |
---|---|---|---|
2 | A2 | 2 | 100 |
2 | A2 | 2 | 106 |
2 | A2 | 2 | 107 |
6 | A6 | 6 | 104 |
6 | A6 | 6 | 101 |
3 | A3 | 3 | 102 |
7 | A7 | 7 | 103 |
8 | A8 | 8 | 105 |
(2)左外连接(left out join)。可获取公共部分的数据集和left join关键字左边的表的数据集。SQL语句:select * from A left join B on A.Aid=B.Bid
Aid | Aname | Bid | Bname |
---|---|---|---|
1 | A1 | NULL | NULL |
2 | A2 | 2 | 100 |
2 | A2 | 2 | 106 |
2 | A2 | 2 | 107 |
3 | A3 | 3 | 102 |
4 | A4 | NULL | NULL |
5 | A5 | NULL | NULL |
6 | A6 | 6 | 104 |
6 | A6 | 6 | 101 |
7 | A7 | 7 | 103 |
8 | A8 | 8 | 105 |
9 | A9 | NULL | NULL |
(3)右外连接(right out join)。可获取公共部分的数据集和right join右边的表的数据集。SQL语句:select * from A right join B on A.Aid=B.Bid
(4)半连接(semi join)。semi join关键字右边的表只用于过滤左边的表的数据而不出现在结果集中。
(5)交叉连接(cross join)。交叉连接返回左表中的所有行,和左表中每一行与右表中所有行的组合。交叉连接也称为笛卡尔积。
Spark执行join的5种策略
Spark提供5种join机制来执行具体的join操作。分别是:shuffle hash join,broadcast hash join,sort merge join,cartesian join,broadcast nested loop join。
(1)shuffle hash join
如果两个表的其中之一(或者其中之二)的数据量比较大,就可以选择shuffle hash join,这样可以保证每个相同的key都发送到同一个分区中。
shuffle hash join的基本步骤主要由以下两点:
(1)对于两张参与join的表,分别按照join key进行重分区,该过程会有shuffle,目的是将相同key的数据发送到同一个分区(一个分区可以有多个key),然后方便分区内执行join。
(2)对于每个shuffle之后的分区,小表的分区数据会构建成一个hash table,然后根据join key与大表的分区数据记录进行匹配。
shuffle hash join的特点:
(1)仅支持等值连接,也就是A表和B表中需要存在某个相同字段,join key不需要排序。
(2)不支持全外连接(full outer joins)
(3)需要对小表构建hash map,属于内存密集型的操作,如果构建hash表的一侧数据也比较大,可能会造成OOM。
(4)需要将参数spark.sql.join.prefersortmergeJoin(default true)设为false
(2)broadcast hash join
如果join的其中一张表比较小,可以选择broadcast hash join,这样可以避免shuffle带来的开销(spark的shuffle操作是很耗时的),从而提高性能。比如事实表与维度表进行join时,由于维度表的数据通常比较小,可以将维度表的数据进行广播(broadcast)。
broadcast hash join的特点
(1)broadcast hash join相比其他join机制效率更高。但由于它本质是数据冗余传输机制,并且需要Driver端缓存数据,所以当小表的数据量也比较大时,会出现OOM。
(2)被广播的小表的数据量要小于spark.sql.autoBroadcastJoinThreshold值,默认是10MB。
(3)被广播的小表的大小阈值不能超过8G。
(3)Sort Merge Join
sort merge join机制是Spark中默认,可以通过参数spark.sqlspark.sql.join.preferSortMergeJoin进行配置,默认是true,即优先使用sort merge join。一般是当需要join的两张表都比较大时,使用这个机制。sort merge join可以减少集群间的数据传输,该方式不会预先加载所有数据到内存,但是join需要对join key进行排序。
sort merge join主要包括三个阶段:
(1)shuffle phase:两张大表根据join key进行shuffle重分区。
(2)sort phase:每个分区内的数据进行排序。
(3)merge phase:对来自不同表的,排序好的分区数据进行join,通过遍历元素,连接具有相同join key值的行来合并数据集。
sort merge join的条件与特点:
(1)仅支持等值连接。
(2)支持所有情况下的join。
(3)join key是排序的。
(4)参数spark.sqlspark.sql.join.preferSortMergeJoin(默认true)设定为true。
(4)Cartesian Join
如果Spark中两张参与join的表没指定join key(on 条件)那么会产生cartesian product join,这个join得到的结果其实就是两张行数的乘积。
cartesian join的特点:
(1)仅支持内连接。
(2)支持等值和不等值连接。
(3)开启参数spark.sql.crossJoin.enable=true
各类join策略的优先级
五种join策略的优先级:Broadcast Hash Join>Sort Merge Join>Shuffle Hash Join>Cartsian Join>Broadcast Nested Loop Join。
【大数据分析】Spark的joins研究相关推荐
- 大数据分析方法:定性研究还是定量研究
大数据分析方法:定性研究还是定量研究 大数据研究就是纯学术方面的东西,对吗?错了!事实上,如果您企业雇用的大数据科学专家所持有的大数据项目理念与您打算在企业业务方面采用的战略哲学不协调的话,您会让自己 ...
- 大数据分析在病毒疫苗研究中的应用
大数据分析在选择病毒疫苗中起着关键作用.现在,这听起来像是科幻小说的摘录.但是实际上,现代大数据分析技术的实际应用可以改善当今的生活. 在大数据分析在病毒疫苗研究中的应用中,我们将为您讲述一个有趣的故 ...
- 记一次徐宗本院士的讲座——大数据分析技术图谱与研究举例
主讲嘉宾:徐宗本院士 主持人:申恒涛教授 海报原文: 大数据分析与处理依赖特定的计算模式与全新的计算方法(称为大数据算法),设计创新的大数据计算模式与大数据算法是大数据的最核心技术,也是一个全新的领域 ...
- spark大数据分析:spark Struct Strreaming(21) 数据流处理
文章目录 根据文件生成工作流 根据kafka生成工作流 以kafka为数据源,通过Batch模式生成工作流 根据指定速率生成工作流 根据文件生成工作流 当文件夹命名为"key=value&q ...
- 基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化
目录 项目介绍 研究背景 国内外研究现状分析 研究目的 研究意义 研究总体设计 数据获取 网络爬虫介绍 豆瓣电影数据的采集 数据预处理 数据导入及环境配置 Flume介绍 Hive介绍 MySQL介绍 ...
- 供应链 信用管理 大数据_大数据分析在供应链管理中的应用
薛如宾 [摘要]我国的综合实力在不断增强,大数据分析也在企业中得到了更大的作用,本文概述了大数据分析在供应链管理的应用,大数据分析在企业中的应用,大数据分析与供应链之间的关系. [关键词]大数据分析; ...
- 什么是大数据分析?定义、优点和类型
在一个技术已经达到其使用巅峰并完全压倒我们生活的时代,交换的数据量是巨大的. 传统的计算工具无法处理的大量数据集每天都在被收集.我们将这些大量数据称为大数据. 如今,企业严重依赖大数据来更好地了解客户 ...
- 面向服务的大数据分析平台解决方案
近年来, 大数据处理与分析已经成为全球性问题,引起欧美各国政府和产业界高度重视,美国政府于2012年3月率先发布了<大数据研究与发展计划>, Google, Amazon. Faceboo ...
- 《Spark大数据分析:核心概念、技术及实践》大数据技术一览
本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问云栖社区"华章 ...
最新文章
- 【目标检测】(5) YOLOV1 目标检测原理解析
- esp8266 lcd 天气_8266WIFI加LCD显示时间及天气pm25
- python 小兵(2)
- lintcode-medium-Longest Common Substring
- 第二阶段冲刺(第十天)
- 查找css,查找CSS样式
- matlab中如何画直方图,用电脑怎么画直方图,如何用matlab画直方图已知频数和组距matl...
- 逻辑表达式在c语言中作用,C语言中逻辑表达式与关系表达式的值
- linux http嗅探工具 httpry
- 阿甘本:什么是当代人
- SOP:Ubuntu20安装微信
- 【计算机毕业设计】基于微信小程序的图书馆座位预约系统
- 电脑录音软件大全,推荐一波优秀的录音软件!
- 汇编之EBP的认识。
- Google VR开发-Cardboard VR SDK头部追踪实现(罗德里格旋转公式)
- python使用requests爬取淘宝搜索页数据
- 200行Go代码实现自己的区块链——区块生成与网络通信
- 云原生Tekton之触发器Trigger
- Cg语言学习笔记(1)
- 关于金融评级机构及金融公司
热门文章
- Android神兵利器之Image Asset Studio
- SpringMVC笔记(4):RESTFul详解
- 人工智能一路狂飙现隐忧 过高预期恐催泡沫
- 内行人看鸿蒙系统,如何看待华为终端2020年全线搭载鸿蒙系统?内行人“一语道破”...
- 面试之前,简历之上:给前端校招同学的简历建议
- ION to SMMU
- 基于ZigBee的智能监控系统-上位机代码
- 传输层 SACK与选择性重传算法
- 一款由c++开发的计时器
- iconv php gbk utf8,PHP通过iconv将字符串从GBK转换为UTF8字符集