了解下SparkSQL中的笛卡尔积

2023-05-16

        虽然应该尽量避免使用笛卡尔积,因为要全量匹配,所以运算的效率十分低下,但是有些业务有必须得用,所以在此了解下SparkSQL中的笛卡尔积。

        SparkSQL中计算笛卡尔积时有两种Join方式:Cartesian Join 和 Broadcast Nested Loop Join。其中 Broadcast Nested Loop Join 是默认的 Join 机制,它可以用来进行任意条件任意类型的 Join。

Cartesian Join:

    该种方式的执行其实就是RDD操作中的cartesian。最终partition的数量是两个RDD partition数量的乘积。它是遍历partition进行计算的,所以会产生巨量多的Task

     SparkSQL对此进行了优化,对右边的数据进行了cache,以便加快计算速度,计算的原理是一致的:

 cache就是标红的地方,把数据放到rowArray结构中:

 

 Broadcast Nested Loop Join:

    选择BNLJ时,优先通过hints判断到底要广播哪一侧的表。如果没有hints的时候,再通过大小比较,广播小一侧的表:

     Join的流程很简单,以Inner Join为例,就是逐条匹配,然后按条件过滤。可以理解为Join的流程就是双重的for循环:

    for(x in ***){

        for(y in ***){

           x match y 

    }

}

参考:

        spark2.4 `Inner join`被“优化”成`CartesianProduct` 

        Spark Catalyst 进阶:Join - Robert Peng's Blog

        https://www.jianshu.com/p/fb8b792a7a9b

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解下SparkSQL中的笛卡尔积 的相关文章

随机推荐

  • 对比目前流行的几个大数据查询引擎:Hive、SparkSQL、Presto、Impala、HAWQ、 ClickHouse、Greenplum。

    1 Hive 1 1 nbsp 介绍 Hive是基于Hadoop的一个数据仓库工具 可以将结构化的数据文件映射为一张数据库表 并 提供完整的sql查询功能 可以将SQL语句转换为MapReduce任务进行运行 其优点是学习成本低 可以通过类
  • mysql批量更新

    这就要介绍一下在MySql中INSERT语法具有一个条件DUPLICATE KEY UPDATE xff0c 这个语法和适合用在需要判断记录是否存在 xff0c 不存在则插入存在则更新的记录 具体的语法可以参见 xff1a http dev
  • ubuntu远程桌面连接windows系统

    转载自 https www cnblogs com brainworld p 7755779 html ubuntu端 xff1a sudo apt get install rdesktop windows端 xff1a 需要允许此wind
  • Linux挂载硬盘

    原文链接 我要挂载的硬盘为sda1 xff0c 首先将硬盘插上 1 查看硬盘 使用检测硬盘命令 xff1a lsblk 看到 sda1 存在 然后使用查看硬盘命令 xff1a span class token function df spa
  • ModuleNotFoundError No module named ‘PIL‘问题解决

    原文链接 Python使用时出现报错 xff1a ModuleNotFoundError No module named PIL 该提示表示缺少pillow模块 xff0c 可以用以下命令安装 xff1a pip span class to
  • SpringBoot实现多线程

    原文链接 代码地址 xff1a https github com Snowstorm0 learn async 1 线程同步和异步 线程同步 xff1a A线程要请求某个资源 xff0c 但是此资源正在被B线程使用中 xff0c 因为同步机
  • pip安装报错:UnicodeDecodeError ‘utf-8‘ codec can‘t decode byte 0xc3 in position 4

    原文链接 使用pip命令安装模块时 xff0c 若出现报错 xff1a UnicodeDecodeError utf 8 codec can t decode byte 0xc3 in position 4 invalid continua
  • Prometheus的使用

    原文链接 Prometheus 是一个开放性的监控解决方案 xff0c 用户可以非常方便的安装和使用 Prometheus 并且能够非常方便的对其进行扩展 在Prometheus的架构设计中 xff0c Prometheus Server
  • Java中restTemplate携带Header请求

    原文链接 RestTemplate是Spring提供的用于发送HTTP请求的客户端工具 现在我们要在Java中使restTemplate携带Header请求 创建请求 创建请求头 xff1a span class token class n
  • SpringBoot整合ElasticSearch

    原文链接 ElasticSearch是个开源分布式搜索引擎 xff0c 提供搜集 分析 存储数据三大功能 它的特点有 xff1a 分布式 xff0c 零配置 xff0c 自动发现 xff0c 索引自动分片 xff0c 索引副本机制 xff0
  • Python将二维数组输出为图片

    原文链接 使用Python读取二维数组 xff0c 将二维数组输出为图片 xff0c 并保存在本地 代码如下 xff1a span class token comment coding 61 utf8 span span class tok
  • 如何使用Tin快速搭建Gitlab-ce?(史上最简单方法)

    GitLab是Git代码版本管理平台 xff0c 相比于GitHub xff0c GitLab还免费支持私人仓库 GitLab ce是gitlab的开源版本 目前网上Gitlab ce的安装方法有很多 xff0c 但大同小异都需要安装各种依
  • 堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)

    原文链接 自动编码器 xff08 Auto Encoder xff0c AE xff09 自动编码器 xff08 Auto Encoder xff0c AE xff09 自编码器 xff08 autoencoder xff09 是神经网络的
  • PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法

    原文链接 1 通道数问题 xff1a 描述一个像素点 xff0c 如果是灰度 xff0c 那么只需要一个数值来描述它 xff0c 就是单通道 如果有RGB三种颜色来描述它 xff0c 就是三通道 最初输入的图片样本的 channels xf
  • Python中LSTM回归神经网络的时间序列预测

    原文链接 这个问题是国际航空乘客预测问题 xff0c 数据是1949年1月到1960年12月国际航空公司每个月的乘客数量 xff08 单位 xff1a 千人 xff09 xff0c 共有12年144个月的数据 网盘链接 提取码 xff1a
  • pip安装时 fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory

    原文链接 使用pip安装模块 xff0c 出现错误 xff1a c users anaconda3 include pyconfig h 68 fatal error C1083 无法打开包括文件 io h No such file or
  • linux 程序被Killed,查看原因

    原文链接 1 查看信息 xff1a 输入以下程序 xff1a dmesg egrep i B100 39 killed process 39 可以输出最近killed的信息 2 设定kill优先度 xff1a xff08 1 xff09 完
  • Kafka的幂等性与事务性理解

    最近在深入理解Flink的Exactly Once xff0c 发现Flink Checkpoint只能保障Flink程序内部的一致性 xff0c 无法保证Sink到外部系统的Exactly Once语义 但是Sink到外部如果实现了Two
  • 为什么不直接操作State,而是要额外定义一个变量

    最近浏览Flink文章的时候发现一个现象 xff0c 就是在操作State的时候 xff0c 很多文章里面并不会直接操作State xff0c 而是会定义一个相似的变量去操作 xff0c 在 snapshot 和 recover 的时候讲变
  • 了解下SparkSQL中的笛卡尔积

    虽然应该尽量避免使用笛卡尔积 xff0c 因为要全量匹配 xff0c 所以运算的效率十分低下 xff0c 但是有些业务有必须得用 xff0c 所以在此了解下SparkSQL中的笛卡尔积 SparkSQL中计算笛卡尔积时有两种Join方式 x