Apache Spark 3.0.0
正式发布啦,Apache Spark 3.0
是在 Spark 2.x
的基础上开发的,带来了新的想法和功能。
Spark
是一个开源的大数据处理、数据科学、机器学习和数据分析工作负载的统一引擎,自 2010 年首次发布以来,已经成长为最活跃的开源项目之一;支持 Java、Scala、Python、R
等语言,并为这些语言提供了相关的SDK
。
Spark 3.0
中的 Spark SQL
是这个版本中最活跃的组件,46%
的已解决的问题都是是针对 Spark SQL
的,包括结构化流和 MLlib
,以及高层API
,包括SQL
和DataFrames
。在经过了大量优化后,Spark 3.0
的性能比 Spark 2.4
快了大约 2
倍。
Python
是目前 Spark
上使用最广泛的语言;针对 Python
语言提供的 PySpark
在PyPI
上的月下载量超过 500 万
。在Spark 3.0
中,对 PySpark
的功能和可用性做了不少改进,包括用 Python
类型提示重新设计 pandas UDF API
,新的pandas UDF
类型,以及更多的 Pythonic
错误处理。
以下便是 Spark 3.0
中的功能亮点:包括 自适应查询执行,动态分区修剪,ANSI SQL
合规性,pandas API
的重大改进,结构化流的新 UI
,调用R
用户定义函数的速度提高了 40
倍,加速器感知的调度器,以及 SQL
参考文档。
把这些功能按照模块来划分就可以分为以下几个模块:
core、Spark SQL、Structured Streaming
MLlib
SparkR
GraphX
- 放弃
Python 2
和R 3.4
以下的版的支持; - 修复一些已知的问题;
core、Spark SQL、Structured Streaming
突出功能
- 加速器感知调度器;
- 自适应查询;
- 动态分区修剪;
- 重新设计的
pandas UDF API
与类型提示; - 结构化流用户界面;
- 目录插件
API
的支持; - 支持
Java 11
; - 支持
Hadoop 3
; - 能够更好的兼容
ANSI SQL
;
性能提升
- 自适应查询;
- 动态分区修剪;
- 优化
9
项规则; - 最小化表缓存同步性能优化;
- 将聚合代码分割成小函数;
- 在
INSERT
和ALTER TABLE ADD PARTITION
命令中增加批处理; - 允许聚合器注册为
UDAF
;
SQL 兼容性增强
- 使用
Proleptic Gregorian
日历; - 建立
Spark
自己的日期时间模式定义; - 为表插入引入
ANSI
存储分配策略; - 在表插入中默认遵循
ANSI
存储分配规则; - 添加一个
SQLConf
:spark.sql.ansi.enabled
,用于开启ANSI
模式; - 支持聚合表达式的
ANSI SQL
过滤子句; - 支持
ANSI SQL OVERLAY
功能; - 支持
ANSI
嵌套方括号内的注释; - 超出整数范围时抛出异常;
- 区间算术运算的溢出检查;
- 当无效字符串被转换为数字类型时,抛出异常;
- 使用区间乘法和除法的溢出行为与其他操作一致;
- 为
char
和decimal
添加ANSI
类型的别名; -
SQL
解析器定义了ANSI
兼容的保留关键字; - 当
ANSI
模式开启时,禁止使用保留关键字作为标识符; - 支持
ANSI SQL.LIKE...ESCAPE
语法; - 支持
ANSI SQL
布尔 - 谓词语法;
PySpark 增强版
- 重新设计的
pandas UDFs
,并提供类型提示; - 允许
Pandas UDF
采用pd.DataFrames
的迭代器; - 支持
StructType
作为Scalar Pandas UDF
的参数和返回类型; - 通过
Pandas UDFs
支持Dataframe Cogroup
; - 增加
mapInPandas
,允许DataFrames
的迭代器; - 部分
SQL
函数也应该取数据列名; - 让
PySpark
的SQL
异常更加Pythonic
化;
扩展性增强
- 目录插件;
- 数据源
V2 API
重构; -
Hive 3.0
和3.1
的版本的元存储支持; - 将
Spark
插件接口扩展到驱动程序; - 可通过自定义指标来扩展
Spark
指标系统; - 为用于扩展列式处理支持提供了开发者
API
; - 使用
DSV2
的内置源迁移:parquet, ORC, CSV, JSON, Kafka, Text, Avro
; - 允许在
SparkExtensions
中注入函数;
连接器增强
- 在数据源表中支持
spark.sql.statistics.fallBackToHdfs
; - 升级
Apache ORC
到1.5.9
; - 支持
CSV
数据源的过滤器; - 使用本地数据源优化插入分区
Hive
表; - 升级
Kafka
到2.4.1
; - 新的内置二进制文件数据源,新的无操作批处理数据源和无操作流接收器;
K8s 中的原生 Spark 应用
- 使用
K8S
进行更灵敏的动态分配,并在K8S
上增加对Spark
的Kerberos
支持; - 使用
Hadoop
兼容的文件系统支持客户端依赖性; - 在
k8s
后台增加可配置的认证秘密源; - 支持
K8s
的子路径挂载; - 在
PySpark Bindings for K8S
中把Python 3
作为默认选项;
MLib
- 为
Binarizer
、StringIndexer
、StopWordsRemover
和PySpark QuantileDiscretizer
添加了多列支持; - 支持基于树的特征转换;
- 增加了两个新的评估器
MultilabelClassificationEvaluator
和RankingEvaluator
; - 增加了
PowerIterationClustering
的R API
; - 添加了用于跟踪 ML 管道状态的
Spark ML
监听器; - 在
Python
中的梯度提升树中添加了带有验证集的拟合。 - 增加了
RobustScaler
变压器; - 添加了因子化机器分类器和回归器;
- 增加了高斯奈夫贝叶斯和互补奈夫贝叶斯;
此外,在 Spark 3.0
中,Pyspark
中的多类逻辑回归现在将返回 LogisticRegressionSummary
,而不是其子类BinaryLogisticRegressionSummary
;pyspark.ml.param.shared.Has* mixins
也不再提供任何 set(self, value)setter
方法,而是使用各自的 self.set(self., value)
代替。
SparkR
通过矢量化的 R gapply()
、dapply()
、createDataFrame
、collect()
提高性能来优化 SparkR
的互操作性;
还有 “eager execution
“ 的 R shell
,IDE
以及迭代聚类的R API
。
弃用组件
- 弃用
Python 2
的支持; - 弃用
R 3.4
以下版本的支持; - 弃用
Deprecate UserDefinedAggregateFunction
;
此次的 Spark 3.0
也算是一个大版本,不仅带来了不少新功能、也修复了很多已知的问题,在性能上有了很大的提升。
自从 Python
官方宣布停止维护 Python2
之后,各大组件也是纷纷响应,都停止了 Python
的支持,各位项目学习 Python
的小伙伴也是可以考虑直接学习 Python 3
了。
老夫虽不正经,但老夫一身的才华!关注我,获取更多编程科技知识。