合水口网站建设,东莞网站建设 手机壳,洛阳制作网站的公司,区块链开发平台有哪些Spark Join关联形式内关联外关联左外关联右外关联全外关联左半/逆关联关联机制NLJSMJHJ分发模式Join 选择等值 Join不等值 JoinJoin 按照关联形式#xff08;Join Types#xff09;划分 : 内关联、外关联、左关联、右关联
Join 按实现机制划分 : NLJ (Nested Loop Join) 、S…
Spark Join关联形式内关联外关联左外关联右外关联全外关联左半/逆关联关联机制NLJSMJHJ分发模式Join 选择等值 Join不等值 JoinJoin 按照关联形式Join Types划分 : 内关联、外关联、左关联、右关联
Join 按实现机制划分 : NLJ (Nested Loop Join) 、SMJ (Sort Merge Join) 、HJHash JoinJoin 按分发模式划分 : Shuffle Join、Broadcast Join
关联形式
Spark SQL支持的关联形式
关联形式Join Type效果内关联inner结果集中只包含满足关联条件的数据左外关联left/leftouter/left_outer内关联结果集左表中不满足关联条件的剩余数据右外关联right/rightouter/right_outer内关联结果集 右表中不满足关联条件的剩余数据全外关联outer/full/fullouter/full_outer内关联结果集 左、右表中不满足关联条件的剩余数据左半关联leftsemi/left_semi内关联结果集但只保留左表部分的数据左逆关联leftanti /left_anti左表中不满足关联条件的数据
内关联
内关联的效果 : 仅保留左右表中满足关联条件的那些数据记录
在员工表与薪资表中只有 1、2、3 这三个值同时存在它们各自的 id 中。所以结果集中就只有 1、2、3 的这三条数据
// 左表
salaries.show
/** 结果打印
---------
| id|salary|
---------
| 1| 26000|
| 2| 30000|
| 4| 25000|
| 3| 20000|
---------
*/// 右表
employees.show
/** 结果打印
-------------------
| id| name|age|gender|
-------------------
| 1| Mike| 28| Male|
| 2| Lily| 30|Female|
| 3|Raymond| 26| Male|
| 5| Dave| 36| Male|
-------------------
*/// 内关联
val jointDF: DataFrame salaries.join(employees, salaries(id) employees(id), inner)jointDF.show
/** 结果打印
----------------------------
| id|salary| id| name|age|gender|
----------------------------
| 1| 26000| 1| Mike| 28| Male|
| 2| 30000| 2| Lily| 30|Female|
| 3| 20000| 3|Raymond| 26| Male|
----------------------------
*/外关联
外关联能细分 3 种形式左外关联、右外关联、全外关联
左外关联
左外关联用 left/ leftouter/ left_outer
左外关联的结果集 : 内关联结果集 左表的不满足关联条件的剩余数据不存在的记录在结果集中的所有字段值均为空值 null
val jointDF: DataFrame salaries.join(employees, salaries(id) employees(id), left)jointDF.show
/** 结果打印
------------------------------
| id|salary| id| name| age|gender|
------------------------------
| 1| 26000| 1| Mike| 28| Male|
| 2| 30000| 2| Lily| 30|Female|
| 4| 25000|null| null|null| null|
| 3| 20000| 3|Raymond| 26| Male|
------------------------------
*/右外关联
右外关联用 right/ rightouter/ right_outer
右外关联的结果集内关联的结果集 右表的剩余数据不存在的记录在结果集中的所有字段值均为空值 null
val jointDF: DataFrame salaries.join(employees, salaries(id) employees(id), right)jointDF.show
/** 结果打印
-----------------------------
| id|salary| id| name|age|gender|
-----------------------------
| 1| 26000| 1| Mike| 28| Male|
| 2| 30000| 2| Lily| 30|Female|
| 3| 20000| 3|Raymond| 26| Male|
|null| null| 5| Dave| 36| Male|
-----------------------------
*/全外关联
全外关联用 full/ outer/ ullouter/ full_outer
全外关联的结果集内关联的结果 那些不满足关联条件的左右表剩余数据
val jointDF: DataFrame salaries.join(employees, salaries(id) employees(id), full)jointDF.show
/** 结果打印
-------------------------------
| id|salary| id| name| age|gender|
-------------------------------
| 1| 26000| 1| Mike| 28| Male|
| 3| 20000| 3|Raymond| 26| Male|
|null| null| 5| Dave| 36| Male|
| 4| 25000|null| null|null| null|
| 2| 30000| 2| Lily| 30|Female|
-------------------------------
*/左半/逆关联
左半关联用 leftsemi/left_semi
左半关联的结果集 : 内关联结果集的子集但仅保留左表数据
// 左半关联
val jointDF: DataFrame salaries.join(employees, salaries(id) employees(id), left_semi)jointDF.show
/** 结果打印
---------
| id|salary|
---------
| 1| 26000|
| 2| 30000|
| 3| 20000|
---------
*/左逆关联用 leftanti/left_anti
左逆关联的结果集 : 不满足条件结果集的子集但仅保留左表数据
// 左逆关联
val jointDF: DataFrame salaries.join(employees, salaries(id) employees(id), left_anti)jointDF.show
/** 结果打印
---------
| id|salary|
---------
| 4| 25000|
---------
*/关联机制
Join 有 3 种实现机制 :
NLJNested Loop Join: 嵌套循环连接SMJSort Merge Join: 排序归并连接HJHash Join: 哈希连接
俗定 : 左表 驱动表右表 基表
驱动表较大主动扫描数据的一边基表较小被动参与数据扫描的一方
Join实现机制范围效率工作原理Nested Loop Join全部关联最差用嵌套循环来实现关联效率最低算法复杂度为 O(M * N)Sort Merge Join等值关联次优先将两表排序再用游标滑动实现关联算法复杂度为 O(M N)Hash Join等值关联最优关联过程分两阶段Build用哈希算法对基表建立哈希表。Probe遍历驱动表每条数据动态计算哈希值再找哈希表来实现关联计算。复杂度为 O(M)
NLJ
NLJ (Nested Loop Join ) 的实现机制用外、内两个嵌套的 for 循环来依次扫描驱动表与基表中的数据记录
外层的 for 循环遍历驱动表的每一条数据驱动表中的每条数据内层 for 逐条扫描基表的所有记录依次判断记录的 id 字段值是否满足关联条件驱动表有 M 行基表有 N 行NLJ 计算复杂度是 O(M * N) SMJ
SMJ (Sort Merge Join) 的实现思路 : 先排序、再归并
对关联的两张表SMJ 先各自排序然后再使用独立的游标对排好序的两张表做归并关联SMJ 算法的计算复杂度为 O(M N)
游标对比的 3 种情况
满足关联条件两边的 id 相等把两边的数据记录拼接并输出然后驱动表的游标下滑不满足关联条件驱动表 id 值 基表的 id 值驱动表的游标下滑不满足关联条件 : 驱动表 id 值 基表的 id 值基表的游标下滑 HJ
HJ (Hash Join) 的设计初衷 : 以空间换时间将基表的计算复杂度降到 O(1)
HJ 的计算的两个阶段Build 阶段和 Probe 阶段
Build 阶段在基表上用自定的哈希构建哈希表。哈希表的 Key 是 id 哈希后的哈希值哈希表的 Value 是基表数据Probe 阶段依次遍历驱动表的每条数据。先用同样的哈希得到哈希值。然后用哈希值去查询刚 Build 好的哈希表。当查询失败就跳过当查询成功就对比两边的 Join Key。如果 Join Key 一致就拼接并输出 分发模式
Join 按照分发模式划分 : Shuffle Join、Broadcast Join
Shuffle Join 任何情况都能完成数据关联的计算Broadcast Join : 广播数据表的全量数据到 Driver 的内存、以及各个 Executors 的内存
Join策略前提条件优势劣势Shuffle Join无适用范围广不受数据体量、内存大小会有 l/O开销容易性能瓶颈Broadcast Join基表 Executors 内存只需广播基表消除驱动表的 Shuffle 过程执行效率高无
用 Shuffle 完成数据关联 : 用广播机制完成数据关联 : 6 种分布式 Join : Spark SQL 的5 种 Join Join 选择
关联条件Join 策略排序等值关联Broadcast HJ Shuffle SMJ Shuffle HJ不等值关联Broadcast NLJ Shuffle NLJ
等值 Join
等值数据关联时Spark 会按照 BHJ SMJ SHJ 的顺序选择 Join 策略
BHJ 效率最高前提条件
连接类型不能是全连接Full Outer Join基表要足够小能放到广播变量
SHJ 前提条件
外表大小大于内表的 3 倍上内表数据分片的平均大小 广播变量阈值
spark.sql.join.preferSortMergeJoin为 False 时Spark SQL 才会先尝试 SHJ
不等值 Join
不等值 Join 只能用 BNLJ和 CPJ
Spark SQL 会按照 BNLJ CPJ 的顺序尝试BNLJ 前提条件内表小能放进广播变量 文章转载自: http://www.morning.qpmmg.cn.gov.cn.qpmmg.cn http://www.morning.xhftj.cn.gov.cn.xhftj.cn http://www.morning.ntzfj.cn.gov.cn.ntzfj.cn http://www.morning.jltmb.cn.gov.cn.jltmb.cn http://www.morning.tpyrn.cn.gov.cn.tpyrn.cn http://www.morning.ghkgl.cn.gov.cn.ghkgl.cn http://www.morning.hchrb.cn.gov.cn.hchrb.cn http://www.morning.mbfkt.cn.gov.cn.mbfkt.cn http://www.morning.rhmpk.cn.gov.cn.rhmpk.cn http://www.morning.vnuwdy.cn.gov.cn.vnuwdy.cn http://www.morning.fdlyh.cn.gov.cn.fdlyh.cn http://www.morning.klltg.cn.gov.cn.klltg.cn http://www.morning.tqdlk.cn.gov.cn.tqdlk.cn http://www.morning.qkrqt.cn.gov.cn.qkrqt.cn http://www.morning.lhrxq.cn.gov.cn.lhrxq.cn http://www.morning.zrgdd.cn.gov.cn.zrgdd.cn http://www.morning.jqbmj.cn.gov.cn.jqbmj.cn http://www.morning.ksqyj.cn.gov.cn.ksqyj.cn http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn http://www.morning.htpjl.cn.gov.cn.htpjl.cn http://www.morning.gnmhy.cn.gov.cn.gnmhy.cn http://www.morning.zxznh.cn.gov.cn.zxznh.cn http://www.morning.rzjfn.cn.gov.cn.rzjfn.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.yqrgq.cn.gov.cn.yqrgq.cn http://www.morning.qnzk.cn.gov.cn.qnzk.cn http://www.morning.czgfn.cn.gov.cn.czgfn.cn http://www.morning.xnflx.cn.gov.cn.xnflx.cn http://www.morning.brnwc.cn.gov.cn.brnwc.cn http://www.morning.yydeq.cn.gov.cn.yydeq.cn http://www.morning.djwpd.cn.gov.cn.djwpd.cn http://www.morning.zmpsl.cn.gov.cn.zmpsl.cn http://www.morning.hwbmn.cn.gov.cn.hwbmn.cn http://www.morning.ymqrc.cn.gov.cn.ymqrc.cn http://www.morning.tnnfy.cn.gov.cn.tnnfy.cn http://www.morning.tbbxn.cn.gov.cn.tbbxn.cn http://www.morning.tmrjb.cn.gov.cn.tmrjb.cn http://www.morning.ssglh.cn.gov.cn.ssglh.cn http://www.morning.rfrxt.cn.gov.cn.rfrxt.cn http://www.morning.nyjgm.cn.gov.cn.nyjgm.cn http://www.morning.jkzq.cn.gov.cn.jkzq.cn http://www.morning.tqygx.cn.gov.cn.tqygx.cn http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn http://www.morning.sgfnx.cn.gov.cn.sgfnx.cn http://www.morning.jqjnl.cn.gov.cn.jqjnl.cn http://www.morning.nrftd.cn.gov.cn.nrftd.cn http://www.morning.mfct.cn.gov.cn.mfct.cn http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn http://www.morning.rdxnt.cn.gov.cn.rdxnt.cn http://www.morning.rgxll.cn.gov.cn.rgxll.cn http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn http://www.morning.rwwdp.cn.gov.cn.rwwdp.cn http://www.morning.wspjn.cn.gov.cn.wspjn.cn http://www.morning.wfzlt.cn.gov.cn.wfzlt.cn http://www.morning.zwtp.cn.gov.cn.zwtp.cn http://www.morning.jnkng.cn.gov.cn.jnkng.cn http://www.morning.blfgh.cn.gov.cn.blfgh.cn http://www.morning.ltpzr.cn.gov.cn.ltpzr.cn http://www.morning.fstdf.cn.gov.cn.fstdf.cn http://www.morning.gmdtk.cn.gov.cn.gmdtk.cn http://www.morning.dgwrz.cn.gov.cn.dgwrz.cn http://www.morning.knqck.cn.gov.cn.knqck.cn http://www.morning.kwnbd.cn.gov.cn.kwnbd.cn http://www.morning.zqcdl.cn.gov.cn.zqcdl.cn http://www.morning.hdpcn.cn.gov.cn.hdpcn.cn http://www.morning.ypbp.cn.gov.cn.ypbp.cn http://www.morning.tsnmt.cn.gov.cn.tsnmt.cn http://www.morning.ctxt.cn.gov.cn.ctxt.cn http://www.morning.langlaitech.cn.gov.cn.langlaitech.cn http://www.morning.btwlp.cn.gov.cn.btwlp.cn http://www.morning.hxxyp.cn.gov.cn.hxxyp.cn http://www.morning.ckcjq.cn.gov.cn.ckcjq.cn http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn http://www.morning.trkhx.cn.gov.cn.trkhx.cn http://www.morning.hpdpp.cn.gov.cn.hpdpp.cn http://www.morning.tknqr.cn.gov.cn.tknqr.cn http://www.morning.slkqd.cn.gov.cn.slkqd.cn http://www.morning.nlzpj.cn.gov.cn.nlzpj.cn http://www.morning.nbnpb.cn.gov.cn.nbnpb.cn http://www.morning.piekr.com.gov.cn.piekr.com