Spark 9:Spark 新特性

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.hqwc.cn/news/130566.html

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

相关文章

Kafka集群架构设计原理详解

从 Zookeeper 数据理解 Kafka 集群工作机制 这一部分主要是理解 Kafka 的服务端重要原理。但是 Kafka 为了保证高吞吐,高性能,高可扩展的三高架构,很多具体设计都是相当复杂的。如果直接跳进去学习研究,很快就会晕头转向。所以&am…

SpringBoot 对接 MinIO 实现文件上传下载删除

前言 MinIO 是一个开源的对象存储服务器,它可以存储大容量非结构化的数据,例如图片、音频、视频、日志文件、备份数据和容器/虚拟机镜像等。 Spring Boot 与 MinIO 的整合可以方便地实现文件的上传和下载等功能 在实际应用中,Spring Boot …

再获深交所认可,Smartbi实力领跑金融BI赛道

“十四五”规划中提到,健全具有高度适应性、竞争力、普惠性的现代金融体系,构建有效支撑实体经济的体制机制。《证券期货业科技发展“十四五”规划》作为指导证券期货业科技发展的纲领性文件, 秉承国家“十四五”规划的数字化发展理念&#x…

flutter开发实战-Universal Links配置及flutter微信分享实现

flutter开发实战-Universal Links配置及flutter微信分享实现 在最近开发中碰到了需要实现微信分享,在iOS端需要配置UniversalLink,在分享使用fluwx插件来实现微信分享功能。 一、配置UniversalLink 1.1、什么是UniversalLink Universal link 是Apple…

在asp.net中,实现类似安卓界面toast的方法(附更多弹窗样式)

目录 一、背景 二、操作方法 2.1修改前 2.2修改后 三、总结 附:参考文章: 一、背景 最近在以前的asp.net网页中,每次点击确定都弹窗,然后还要弹窗点击确认,太麻烦了,这次想升级一下,实现…

ES知识点全面整理

● 我们从很多年前就知道 ES6, 也就是官方发布的 ES2015 ● 从 2015 年开始, 官方觉得大家命名太乱了, 所以决定以年份命名 ● 但是大家还是习惯了叫做 ES6, 不过这不重要 ● 重要的是, ES6 关注的人非常多, 大家也会主动去关注 ● 但是从 2016 年以后, 每年官方都会出现新…

ToBeWritten之车联网安全中常见的TOP 10漏洞

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…

用《斗破苍穹》的视角打开C#委托2 委托链 / 泛型委托 / GetInvocationList

委托链 经过不懈地努力,我终于成为了斗师,并成功掌握了两种斗技——八极崩和焰分噬浪尺。于是,我琢磨着,能不能搞一套连招,直接把对方带走。 using System; using System.Collections.Generic; using System.Linq; u…

串联起深度学习的整体,以及其他领域

1、从模型拟合(收敛)数据关系出发: 2、f从简单的一层和两层连接开始,发展;被表示成 3、如何判断收敛:,即目标函数 4、如何界定任务:,表示什么?表示什么?&a…

【Java 进阶篇】CSS 属性

当你学习CSS时,了解CSS属性是非常重要的,因为这些属性控制了网页上元素的外观和布局。本文将详细介绍一些常见的CSS属性,包括文本属性、盒子模型属性、背景和边框属性、定位属性等。我们还将为每个属性提供示例代码,以便你更好地理…

Xcode 15下,包含个推的项目运行时崩溃的处理办法

升级到Xcode15后,部分包含个推的项目在iOS17以下的系统版本运行时,会出现崩溃,由于崩溃在个推Framework内部,无法定位到具体代码,经过和个推官方沟通,确认问题是项目支持的最低版本问题。 需要将项目的最低…

android app开发环境搭建

Android是流行的移动设备原生应用开发平台,其支持Java语言以及Kotlin语言的开发环境,本文主要描述官方提供的Android studio集成开发环境搭建。 https://developer.android.google.cn/ 如上所示,从官方上下载最新版本的Android studio集成开…