spark3.x新特性

Adaptive Query Execution自适应查询(SparkSQL)

由于缺乏或者不准确的数据统计信息(元数据)和对成本的错误估算(执行计划调度)导致生成的初始执行计划不理想
在Spark3.x版本提供Adaptive Query Execution自适应查询技术
通过在”运行时”对查询执行计划进行优化,允许Planner在运行时执行可选计划,这些可选计划将会基于运行时数据
统计进行动态优化,从而提高性能.
Adaptive Query Execution AQE主要提供了三个自适应优化:

  • 动态合并Shuffle Partitions
    可以动态调整shuffle分区的数量。用户可以在开始时设置相对较多的shuffle分区数,AQE会在运行时将相邻的小分区合并为较大的分区。

  • 动态调整Join策略
    此优化可以在一定程度上避免由于缺少统计信息或着错误估计大小(当然也可能两种情况同时存在),而导致执行计划性能不佳的情况,比如某个join操作中其中一个数据集很小,通过网络io的shuffle次数会比较多。这种自适应优化可以在运行时sort merge join转换成broadcast hash join,从而进一步提升性能,也就是我们之前提到的将小数据集发送到各executor的线程中
    在这里插入图片描述

  • 动态优化倾斜Join(Skew Joins)
    skew joins可能导致负载的极端不平衡,并严重降低性能。在AQE从shuffle文件统计信息中检测到任何倾斜后,它可以将倾斜的分区分割成更小的分区,并将它们与另一侧的相应分区连接起来。这种优化可以并行化倾斜处理,获得更好的整体性能。A0分组的数据量比较大,会动态给它拆分,达到各分组数据集大小平衡

在这里插入图片描述
触发条件:
l.分区大小>spark.sql.adaptive.skewJoin.skewedPartitionFactor(default:=lO)*"median partition size(中位数分区大小)
2.分区大小>spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes(default=256MB)

开启AQE方式
set spark.sql.adaptive.enabled true;

总的来看,我们无需人为设置复杂参数,只需设置AQE,spark就可以自动化优化sparksql查询

动态分区裁剪

该特性无需人为开启,spark3.x会根据具体sparksql语句来实现分区数的动态裁剪,提升性能

koalas API

该api是为了让开发者能在分布式环境中,模拟pandas数据处理,更高效地处理大数据,弥补pandas仅限单节点运行的缺点,我们python开发者就有两种编程选择,pyspark和koalas

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

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

相关文章

redis集合Set

set是一种无序集合。它和列表的区别在于列表中的元素都是可以重复的,而set中的元素是不能重复的。而且set中的元素,并不像列表那样是具有顺序的。 SADD是添加一个元素。course是集合。 SMEMBERS SISMEMBER判断Redis在不在集合course里 SREM是用来删除Re…

VSCode美化

今天有空收拾了一下VSCode,页面如下,个人觉得还是挺好看的~~ 1. 主题 Noctis 色彩较多,有种繁杂美。 我使用的是浅色主题的一款Noctis Hibernus 2. 字体 Maple Mono 官网:Maple-Font 我只安装了下图两个字体,使…

C++算法补充---STL

这里写目录标题 CSTL容器字符串函数(string容器函数)字符串转字符 算法交换函数拿到容器或者数组的第一个最大(小)值元素的下标或者值排序函数求字符数组的有效长度atoi函数(将字符串类型的数字转为真正的int型数字)string转字符 …

RUST Rover 条件编译 异常处理

按官方处理发现异常 会报异常 error: failed to parse manifest at C:\Users\topma\RustroverProjects\untitled2\Cargo.toml 修改模式如下才能正常编译 网上说明 这样处理 [features] print-a [] print-b [] full ["print-a","print-b"]

Vue3组件计算属性的缓存

Vue.js3组件的方法-CSDN博客 使用Vue3组件的计算属性-CSDN博客 Vue3组件计算属性的get和set方法-CSDN博客 计算属性是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时,才会重新求值。 计算属性的写法和方法很相似,完全可以在method…

鸿蒙OS元服务开发:【(Stage模型)学习窗口沉浸式能力】

一、体验窗口沉浸式能力说明 在看视频、玩游戏等场景下,用户往往希望隐藏状态栏、导航栏等不必要的系统窗口,从而获得更佳的沉浸式体验。此时可以借助窗口沉浸式能力(窗口沉浸式能力都是针对应用主窗口而言的),达到预…

第五篇:3.4 用户归因和受众(User attribution and audience) - IAB/MRC及《增强现实广告效果测量指南1.0》

翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象(AD Impression)第三篇广告效果测量定义和其他矩阵之- 3.2 可见性 (Viewability)第四篇广…

Apache Paimon实时数据糊介绍

Apache Paimon 是一种湖格式,可以使用 Flink 和 Spark 构建实时 数据糊 架构,用于流式和批处理操作。Paimon 创新地将湖格式和 LSM(日志结构合并树)结构相结合,将实时流式更新引入湖架构中。 Paimon 提供以下核心功能: 实时更新: 主键表支持大规模更新的写入,具有非常…

day4|gin的中间件和路由分组

中间件其实是一个方法, 在.use就可以调用中间件函数 r : gin.Default()v1 : r.Group("v1")//v1 : r.Group("v1").Use()v1.GET("test", func(c *gin.Context) {fmt.Println("get into the test")c.JSON(200, gin.H{"…

Redis的安装部署

目录 1、关闭防火墙 2、yum安装gcc依赖包 3、提前准备好安装包并解压在opt目录下 4、进入redis目录下进行make编译 5、选择用于安装的目录 6、执行软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件 7、一直回车直到出现以下提示 8、 把redi…

ClickHouse集群搭建教程

文章目录 前言一、相关介绍1. 端口介绍 二、部署规划1. 准备centos2. 配置集群免密登录3. 部署规划 三、ckman依赖部署1. prometheus搭建1.1 下载并解压1.2 配置启停服务1.3 promethues配置(可选,不影响ckman核心功能)1.4 prometheus启停命令1.4.1 启动prometheus1.…

3D模型格式转换工具HOOPS Exchange如何将3D文件加载到PRC数据结构中?

HOOPS Exchange是一款高效的数据访问工具,专为开发人员设计,用于在不同的CAD(计算机辅助设计)系统之间进行高保真的数据转换和交换。由Tech Soft 3D公司开发,它支持广泛的CAD文件格式,包括但不限于AutoCAD的…