SparkSQL允许左联接的数据量大于左表数据量?

Spark SQL联接

    • 1、Spark SQL联接
    • 2、问题描述
    • 3、问题原因
    • 4、问题解决
    • 5、Spark SQL联接总结




1、Spark SQL联接


本文主要记录一次Spark SQL在多表关联时出现的OOM问题以及解决。看似是OOM问题,实则是数据倾斜问题。在讨论这个问题之前,我们有必要先来看一下Spark SQL有哪些Join类型

Spark SQL共提供了7种Join类型,包括:内联接、左联接、右联接、全连接、交叉联接、半联接和反联接。以下是各Join类型的介绍以及联接示例:

准备示例数据如下:

-- 使用员工和部门表来演示不同类型的联接
create table employee(id string,name string,deptno bigint
);insert into employee values
('105','Chloe', 5),
('103','Paul', 3),
('101','John', 1),
('102','Lisa', 2),
('104','Evan', 4),
('106','Amy', 6);SELECT * FROM employee;
+---+-----+------+
| id| name|deptno|
+---+-----+------+
|105|Chloe|     5|
|103| Paul|     3|
|101| John|     1|
|102| Lisa|     2|
|104| Evan|     4|
|106|  Amy|     6|
+---+-----+------+create table department(deptno bigint,deptname string
);insert into department values
(3,'Engineering'),
(2,'Sales'),
(1,'Marketing');SELECT * FROM department;
+------+-----------+
|deptno|   deptname|
+------+-----------+
|     3|Engineering|
|     2|      Sales|
|     1|  Marketing|
+------+-----------+

1)内联接(Inner Join)

语法:

A [ INNER ] JOIN B

内联接是Spark SQL中的默认联接。它选择在两个表中具有公共匹配值的行

示例:

SELECT id, name, employee.deptno, deptname FROM employee INNER JOIN department ON employee.deptno = department.deptno;
+---+-----+------+-----------|
| id| name|deptno|   deptname|
+---+-----+------+-----------|
|103| Paul|     3|Engineering|
|101| John|     1|  Marketing|
|102| Lisa|     2|      Sales|
+---+-----+------+-----------|

2)左联接(Left Join)

语法:

A LEFT [ OUTER ] JOIN B

左联接返回左侧表中的所有值和右侧表中的匹配值,如果没有匹配项,则追加NULL

示例:

SELECT id, name, employee.deptno, deptname FROM employee LEFT JOIN department ON employee.deptno = department.deptno;
+---+-----+------+-----------|
| id| name|deptno|   deptname|
+---+-----+------+-----------|
|105|Chloe|     5|       NULL|
|

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超越GPT-4V,苹果多模态大模型上新,神经形态计算加速MLLM(二)

上文介绍基于MINOnets神经网络架构加速多模态大模型的策略,本文将以Spinnaker2多核神经网络芯片EGRU架构为起点,覆盖存内计算架构,介绍新型计算架构在加速大模型推理的作用。SpiNNaker 2是一个设计用于大规模异步处理的多核神经形态芯片&…

openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置

文章目录 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置267.1 操作步骤 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置 本章节主要介绍openGauss数据库内核基于鲲鹏服务器和openE…

T3BI T3BI RS-232通讯操作指南与培训PPT课件

T3BI T3BI RS-232通讯操作指南与培训PPT课件

Python连接Oracle数据库问题解决及Linux服务器操作知识

背景说明 最近在做一个视频分析的项目,然后需要将视频分析的数据写入到oracle数据库,直接在服务器上测试数据库连接的时候出现了这个bug提示,自己通过不断的研究探讨,最终把这个问题成功进行了解决,在这里进行一下记录…

701强连通分量(python)

看见题目知道时间复杂度不超过(mlogm)。 这题用强连通分量 Tarjan 算法,强联通:对于任意两个点u和v,u可以到达v,v也可以到达u。这题需要考虑有重边,自环,同样别忘记可能会有两个点u…

Linux 操作系统编译器、静态库、动态库

1、编辑器 1.1、vim的安装 指令:sudo apt-get install vim 1.2 vim的使用 格式:vim 文件名 如果文件存在,只打开,文件不存在,创建并打开 vim的4中模式: 命令模式,插入模式,底行模…

JumpServer 运维指南

修改HTTP访问端口 rootuvm-01:/opt/tools/jumpserver-offline-installer-v3.10.7-amd64# ./jmsctl.sh reconfig./jmsctl.sh: line 204: down: command not found 1. Configure Private Key complete2. Configure Persistent Directory Do you need custom persistent store, …

Excel数据处理:高级筛选、查找定位、查找函数(VLOOKUP)

高级筛选 先去选中筛选区域 如果筛选的条件在同一行那么就是且的关系 如果筛选的条件不在同一行那么就是或的关系 查找定位空值 使用VLOOKUP函数

渗透测试入门教程,从零基础入门到精通(非常详细)

目录 什么是渗透测试 渗透测试的重要性 渗透测试的前置技能 开始入门学习路线 什么是渗透测试 渗透测试,通常被视为模拟黑客的一种安全评估行为,其目的在于全面挖掘目标网站或主机的潜在安全漏洞。与真实的黑客攻击不同,渗透测试旨在发现…

Spring定时器 Cron表达式的用法

前言 Cron表达式是一种用于描述定时任务执行时间的字符串格式,这种表达式基于时间字段来定义任务应该在哪些时间点执行,通常包含六个或七个用空格隔开的字段,分别代表秒、分钟、小时、日期、月份和星期(年份是可选的)…

嵌入式系统中AI可以提高开发效率方法

未来是 AI 的时代,博主最近写代码都喜欢用 AI 写个草稿,修修改改就能用,大幅提高了工作效率。举个例子: 指令:写一个使用 kfifo 的内核模块 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/kfifo.…

系统架构最佳实践 -- 相关JAVA架构

1. java 类加载器架构 2. JVM 架构 3. Java 技术体系 4. 线程运行架构 5. Java 体系&#xff08;编译与运行&#xff09;结构 6. JMS 技术架构 7. JMX 技术架构 8. Spring 架构 9. Hibernate 架构 10. ibatis 架构 11. Struts2 架构 12. Struts1 架构 13. JBPM 14. EJB 技术架构…

万字总结!Docker简介及底层关键技术剖析

本文首发在个人博客上&#xff1a;万字总结&#xff01;Docker简介及底层关键技术剖析 Docker 简介 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#x…

滚动条详解:跨平台iOS、Android、小程序滚动条隐藏及自定义样式综合指南

滚动条是用户界面中的图形化组件&#xff0c;用于指示和控制内容区域的可滚动范围。当元素内容超出其视窗边界时&#xff0c;滚动条提供可视化线索&#xff0c;并允许用户通过鼠标滚轮、触屏滑动或直接拖动滑块来浏览未显示部分&#xff0c;实现内容的上下或左右滚动。它在保持…

补档 -- 测试的分类(1)

最近有很多人私信我说: 灰灰你什么时候写测试分类阿, 本来我要开始肝性能测试的, 我一看, 奥, 之前摸鱼忘写了, 所以这里补档(叶问指着一边笑.jpg). 总览 标红的需要注意一下. 为什么要对软件测试进行分类? 软件测试是软件生命周期的一个重要环节, 具有较高的复杂性, 对于软…

排序 “叁” 之交换排序

目录 1. 基本思想 2.冒泡排序 2.1 基本思想 2.2 代码示例 2.3 冒泡排序的特性总结 3.快速排序 3.1 基本思想 &#x1f335;hoare版本 &#x1f335;挖坑法 ​编辑 &#x1f335;前后指针版本 ​编辑 3.2 快速排序优化 &#x1f33b;三数取中法选key 3.4 快速排序…

如何在群晖NAS部署office系统办公服务并实现无公网IP远程编辑文件

文章目录 本教程解决的问题是&#xff1a;1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是&#xff1a; 1.Word&#xff0c;PPT&#xff0c;Excel等重要文件存在本地环境&#xff0c;如何在编…

宝塔面板MYSQL自动停止解决办法

宝塔面板MYSQL自动停止解决办法 在使用宝塔的过程中&#xff0c;经常会遇到了 MySQL 自动停止的问题&#xff0c;尤其是配置低一些的服务器。导致 MySQL 停止的情况有很多种&#xff0c;这里不再多述。 下面教大家怎么解决这一问题。在宝塔的计划任务里添加一段 shell 命令&a…

Umi.js:登录之后需要手动刷新权限菜单才能渲染

在使用Umi.js开发后台管理页面时&#xff0c;用户登录之后&#xff0c;总是需要手动刷新一次页面&#xff0c;才能够拿到全局状态/权限信息。 问题描述 结合使用umi/plugin-layout和umi/plugin-access&#xff0c;登录进入页面&#xff0c;配置的权限菜单未渲染&#xff0c;需…

BPMN2.0 任务-任务监听器

任务监听器(task listener)用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式。 任务监听器只能在流程定义中作为用户任务的子元素。请注意,任务监听器是一个Flowable自定义结构,因此也需要作为BPMN 2.0 extensionElements,放在flowable命名空间下。 <us…