Spark 9:Spark 新特性

news2024/9/23 15:09:51

Spark 3.0 新特性

Adaptive Query Execution 自适应查询(SparkSQL)

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

开启AQE方式

767e0174e2674832a5cd193555b22059.png

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

05a3e35e3724484e8369737cd5950d4e.png

AQE OFF

ccd38371e03c4a67803fe0b36dd91bee.png

AQE ON 

动态调整Join策略 Dynamically switching join strategies
此优化可以在一定程度上避免由于缺少统计信息或着错误估计大小(当然也可能两种情况同时存在),而导致执行计划性能不佳的情况。这种自适应优化可以在运行时sort merge join转换成broadcast hash join,从而进一步提升性能。

0f8fd0a9f3e142ff9ed397fd5d9e46bf.png

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

d9af44d6f8414abe8af3f45a9f0365aa.png

触发条件:
1. 分区大小 > spark.sql.adaptive.skewJoin.skewedPartitionFactor (default=10) * "median partition size(中位数分区大小)"
2. 分区大小 > spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes (default = 256MB)

AQE 总结:
1. AQE的开启通过: spark.sql.adaptive.enabled 设置为true开启
2. AQE是自动化优化机制, 无需我们设置复杂的参数调整, 开启AQE符合条件即可自动化应用AQE优化
3. AQE带来了极大的SparkSQL性能提升

e25cbf8c886c428cb6e75cb1a48c9359.png

Dynamic Partition Pruning 动态分区裁剪(SparkSQL)
当优化器在编译时无法识别可跳过的分区时,可以使用"动态分区裁剪",即基于运行时推断的信息来进一步进行分区裁剪。这在星型模型中很常见,星型模型是由一个或多个并且引用了任意数量的维度表的事实表组成。在这种连接操作中,我们可以通过识别维度表过滤之后的分区来裁剪从事实表中读取的分区。在一个TPC-DS基准测试中,102个查询中有60个查询获得2到18倍的速度提升。

d67a31b39ed144b4bd5b693f7c04450c.png

95146a6cd1c240028138c1d3b3446093.png 

增强的Python API: PySpark和Koalas
Python现在是Spark中使用较为广泛的编程语言,因此也是Spark 3.0的重点关注领域。Databricks有68%的notebook命令是用Python写的。PySpark在 Python Package Index上的月下载量超过 500 万。
很多Python开发人员在数据结构和数据分析方面使用pandas API,但仅限于单节点处理。Databricks会持续开发Koalas——基于Apache Spark的pandas API实现,让数据科学家能够在分布式环境中更高效地处理大数据。
经过一年多的开发,Koalas实现对pandas API将近80%的覆盖率。Koalas每月PyPI下载量已迅速增长到85万,并以每两周一次的发布节奏快速演进。虽然Koalas可能是从单节点pandas代码迁移的最简单方法,但很多人仍在使用PySpark API,也意味着PySpark API也越来越受欢迎。

2e78c25cf36043309a617561b7204864.png

74a9ae40866343c48af2d5eefc8e87f0.png

Koalas入门演示 - Koalas DataFrame构建

pip install koalas # 安装koalas类库

da4289e3048e418ba338cc1ac2b44bea.png 

# 构建Pandas的DatetimeIndex
dates = pd.date_range('20130101', periods=6)
# 构建Pandas的DataFrame
pdf = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 基于PDF构建Koalas DataFrame
kdf = ks.from_pandas(pdf); type(kdf)
# 或者基于SparkSession构建
sdf = spark.createDataFrame(pdf) # 先转换PandasDataFrame成SparkDataFrame
kdf = sdf.to_koalas() # 转换SparkDataFrame到KoalasDataFrame

# 或者直接创建kdf也可以
kdf = ks.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})

d9762ae4ffa5499a87e2eb759feef0b5.png

32cd5d7258844213b6071bfd2594ef1b.png

58f842261c3c432c8906b1fa26b0e0e5.png

be707d404f0b43c2a29ba8e26c543dca.png

kdf3 = ks.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})

1d60666b10e54d71bcf160444ac6a68b.png 

97d4bdcd6fc04b0b8852fc6de16500c3.png

cd0198e3a9464229a6b61f9dc6f80a12.png

6e12b249d44440509ef3e03ea3c42a42.png

1. AQE的开启通过: spark.sql.adaptive.enabled 设置为true开启,触发后极大提升SparkSQL计算性能
2. 动态分区裁剪可以让我们更好的优化运行时分区内数据的量级. 通过动态的谓词下推来获取传统静态谓词下推无法获得的更高过滤属性, 减少操作的分区数据量以提高性能.
3. 新版Koalas类库可以让我们写Pandas API(Koalas提供)然后将它们运行在分布式的Spark环境上, Pandas开发者也能快速上手Spark

 

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

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

相关文章

小说推文和短剧推广的优势和申请授权方式

小说推文和短剧推广都可以通过”巨量推文“申请授权 先说说优势,短视频赛道有很多,普遍的门槛过高,目前小说推文和短剧推广只要你有短视频账号就可以推广 相对来说门槛更低,可以”白嫖“流量来进行变现

Spring核心源码-如何解决循环依赖

假设有两个类A和B B是A的成员变量,A也是B的成员变量。 假设类A的bean为a,类B的bean为b。且IOC容器先处理A。 熟悉Spring容器初始化的同学,应该都知道,容器初始化的过程中,bean的创建是如下触发的: getBean…

Unity可视化Shader工具ASE介绍——4、ASE的自定义模板使用

大家好,我是阿赵。   继续介绍Unity可视化Shader编辑工具ASE。之前的文章介绍了在ASE里面可以选择不同的Shader类型。这一篇来继续探讨一下,这些Shader类型究竟是什么。 一、所谓的Shader类型是什么 选择不同的Shader类型,会出现不同的选项…

Unity 之 EditorGUILayout.BeginHorizontal/EndHorizontal异常报错问题

报错内容: 缘由:由于在EditorGUILayout.EndHorizontal()之前执行了类似打开窗口的逻辑 解决办法: 在EditorGUILayout.EndHorizontal()之前执行GUIUtility.ExitGUI();

vulnhub_driftingblues7靶机渗透测试

Driftingblues7靶机 文章目录 Driftingblues7靶机信息收集web渗透获取权限另外思路靶机总结 信息收集 使用nmap扫描得到靶机ip为192.168.78.174,开放发端口有很多,而且开放了443端口,所以访问网站是需要https协议的 再对该网站进行目录扫描&…

10-09 周一 图解机器学习之深度学习感知机学习

10-09 周一 图解机器学习之深度学习感知机学习 时间版本修改人描述2023年10月9日14:13:20V0.1宋全恒新建文档 简介 感知机是神经网络中的概念,1958年被Frank Rosenblatt第一次引入。感知机作为一种基本的神经网络模型,它模拟了人脑神经元的工作原理。感…

解决Feign的自定义解码器在接口返回值为void时不执行的问题

项目的接口有一个全局的响应包装器,将接口的所有返回,包括各种类型如List、Entity,或者void,以及抛出的异常,封装成统一的结构给到前端,所以在使用Feign发起远程调用的时候,需要一个自定义的解码…

详解 ElasticSearch 基础教程

🌹 分享 ElasticSearch 基础,请指教。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有对阁下帮助,请👍点赞💖收藏🐱‍🏍分…

Python 自动化Web测试

限于作者水平有限,以下内容可能是管窥之见,希望大家高抬贵手,且让我斗胆抛砖引玉。 公司产品迪备主要是通过网页操作来进行数据库的备份与恢复,监控与管理,因此在测试的过程中,可以用python测试脚本来模拟…

运维知识点汇总

一.公共基础 linux常用目录 链接一 链接二 linux系统启动 链接一 链接二 LVM 链接一 磁盘挂载 链接一 文件权限 链接一 二.VLAN详解 链接 三.中间件 单体部署: 优点: (1)小团队成型即可完成开发-测试-上线&am…

3D机器视觉:解锁未来的立体视野

原创 | 文 BFT机器人 机器视觉领域一直在不断演进,从最初的二维图像处理,逐渐扩展到了更复杂的三维领域,形成了3D机器视觉。3D机器视觉技术的涌现为计算机系统带来了全新的感知和理解能力,这一领域的发展正日益受到广泛关注。本文…

Android系统为什么采用Binder作为IPC机制

Android系统提供了多种进程间通信(IPC)的机制,用于不同进程之间的数据交换和通信。以下是Android系统中常用的几种IPC机制: Intent:Intent是Android系统中常用的一种进程间通信方式。通过发送Intent,可以在…

链表去重Java

去除掉链表中重复的元素,两种方法: static class ListNode{private int val;private ListNode next;public ListNode(int val, ListNode next) {this.val val;this.next next;}Overridepublic String toString() {return "ListNode{" "val" val ",…

【jvm】程序计数器

目录 一、介绍二、作用三、示例3.1 代码3.2 javap -v Test1.class3.2.1 操作指令及地址 一、介绍 1.jvm中的程序计数寄存器中(program counter register),register的命名源于cpu的寄存器,寄存器存储指令相关的现场信息 2.cpu只有把…

C++学习之指针和数组

指针和一维数组 一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既可以指向变量,当然也可以指向数组元素。所谓数组元素的指针就是数组元素的地址。 eg: int a[6]; //定义一个整数数组a…

web:[HCTF 2018]admin

题目 点击页面显示如下 点击hctf显示 没有账号,先注册一个 随便注册一个试试看 输入账号密码显示如下 页面没有其他的提示,查看源代码 这里提示不是admin 先注册一个admin账号试一下 显示admin已经被注册了,所以知道用户名为admin&#xff0…

【图像分割】SAM、FastSAM与MobileSAM原理

文章目录 前言:Segment Anything一、FastSAM二、MobileSAM框架实验 总结 前言:Segment Anything Meta 今年发布了图像分割模型 Segment Anything Model (SAM) 。SAM 已经学会了关于物体的一般概念,可以为任何图像或视频中的任何物体生成 mas…

基于共生生物优化的BP神经网络(分类应用) - 附代码

基于共生生物优化的BP神经网络(分类应用) - 附代码 文章目录 基于共生生物优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.共生生物优化BP神经网络3.1 BP神经网络参数设置3.2 共生生物算法应用 4.测试结果…

JDBC-day03(BLOB类型字段,批量插入)

四:操作BLOB类型字段 1.MySQL BLOB类型 在MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。可以用来存储图片,视频等 插入BLOB类型的数据必须使用PreparedStatement&#x…

redis,mongoDB,mysql,Elasticsearch区别

Redis: Redis是一种高性能键值存储数据库,基于内存操作,支持数据持久化,支持数据类型丰富灵活,如字符串、哈希、列表、集合、有序集合等。Redis还提供了订阅/发布、事务、Lua脚本、主从同步等功能,适用于访…