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)

相关推荐

  • nodejs中事件模块提供了什么对象

    技术nodejs中事件模块提供了什么对象这篇文章给大家分享的是有关nodejs中事件模块提供了什么对象的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在nodejs

    攻略 2021年11月11日
  • LARAVEL AJAX简单跨域的示例分析

    技术LARAVEL AJAX简单跨域的示例分析本篇文章为大家展示了LARAVEL AJAX简单跨域的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。//前端 <scri

    攻略 2021年10月21日
  • MySQL学习笔记:十、创建和管理表

    技术MySQL学习笔记:十、创建和管理表 MySQL学习笔记:十、创建和管理表1. 基础知识
    1.1 一条数据存储的过程
    存储数据是处理数据的第一步。只有正确地把数据存储起来,我们才能进行有效的处理和分

    礼包 2021年12月15日
  • Stream流

    技术Stream流 Stream流package com.mayikt.stream;import com.mayikt.entity.UserEntity;import java.util.Array

    礼包 2021年11月24日
  • 在营销过程中代理ip有的作用是什么

    技术在营销过程中代理ip有的作用是什么本篇内容主要讲解“在营销过程中代理ip有的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“在营销过程中代理ip有的作用是什么”吧

    攻略 2021年11月2日
  • 水尤清冽,小石潭记原文一句一句翻译

    技术水尤清冽,小石潭记原文一句一句翻译《小石潭记》一、全文翻译水尤清冽。
    原文:从小丘西行百二十步,隔篁竹闻水声,如鸣佩环,心乐之。
    译文:从小丘向西行走一百二十步,隔着竹林,听见水声,好象挂在身上的玉佩、玉环相互碰撞发

    生活 2021年10月22日