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





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|
|

相关推荐

  1. SparkSQL允许联接数据数据

    2024-04-22 04:16:04       13 阅读
  2. 哪些情况下联接数据

    2024-04-22 04:16:04       19 阅读
  3. 数据比较 | 分库分

    2024-04-22 04:16:04       13 阅读
  4. Mysql数据删除

    2024-04-22 04:16:04       30 阅读
  5. 工作随记:oracle重建一张1T数据

    2024-04-22 04:16:04       16 阅读
  6. 针对oracle系列数据库数据问题

    2024-04-22 04:16:04       8 阅读
  7. 数据快速数据库还原程序

    2024-04-22 04:16:04       35 阅读
  8. Oracle-查询用户下所有数据

    2024-04-22 04:16:04       34 阅读
  9. Elasticsearch单个索引数据优化

    2024-04-22 04:16:04       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 04:16:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 04:16:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 04:16:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 04:16:04       18 阅读

热门阅读

  1. Gradle:安装、配置及基础使用指南

    2024-04-22 04:16:04       12 阅读
  2. [leetcode] 快乐数 E

    2024-04-22 04:16:04       12 阅读
  3. C# 多线程 未完

    2024-04-22 04:16:04       9 阅读
  4. Python机器学习项目开发实战:深度神经网络

    2024-04-22 04:16:04       11 阅读
  5. Tomcat源码解析——热部署和热加载原理

    2024-04-22 04:16:04       13 阅读
  6. CentOS7 aarch64安装yum

    2024-04-22 04:16:04       12 阅读
  7. 关于使用后端实现动态表单功能的心得

    2024-04-22 04:16:04       11 阅读
  8. 【npm】常用的NPM命令及在开发过程中的应用

    2024-04-22 04:16:04       11 阅读
  9. linux设备树- device_node的 fwnode的作用

    2024-04-22 04:16:04       15 阅读
  10. XXE漏洞

    XXE漏洞

    2024-04-22 04:16:04      12 阅读