Apache Spark 3.0.0是3.x系列的第一个发行版。投票于2020年6月10日获得通过。此版本基于git标签v3.0.0,其中包括截至6月10日的所有提交。Apache Spark 3.0建立在Spark 2.x的许多创新基础之上,带来了新的想法并持续了很长时间。正在开发的长期项目。在开源社区的巨大贡献的帮助下,由于440多位贡献者的贡献,此发行版解决了3400多张门票。
今年是Spark作为开源项目10周年。自2010年首次发布以来,Spark已经发展成为最活跃的开源项目之一。如今,Spark实际上是用于大数据处理,数据科学,机器学习和数据分析工作负载的统一引擎。
Spark SQL是此版本中最活跃的组件。已解决票证的46%用于Spark SQL。这些增强功能使所有更高级别的库(包括结构化流和MLlib)以及更高级别的API(包括SQL和DataFrames)受益。此版本中添加了各种相关的优化。在TPC-DS 30TB基准测试中,Spark 3.0大约是Spark 2.4的两倍。
Python现在是Spark上使用最广泛的语言。PySpark每月在PyPI(Python软件包索引)上的下载量超过500万。此版本改善了功能和可用性,包括使用Python类型提示重新设计了熊猫UDF API,新的熊猫UDF类型以及更多的Python错误处理。
以下是Spark 3.0中的功能亮点:自适应查询执行;动态分区修剪;符合ANSI SQL;熊猫API的重大改进;用于结构化流的新UI;调用R用户定义函数的速度提高了40倍;加速器感知调度器;和SQL参考文档。
可识别加速器的计划程序(SPARK-24615)
自适应查询执行(SPARK-31412)
N动态分区修剪(SPARK-11150)
重新设计了带有类型提示的熊猫UDF API(SPARK-28264)
结构化流式用户界面(SPARK-29543)
目录插件API(SPARK-31121)
Java 11支持(SPARK-24417)
Hadoop 3支持(SPARK-23534)
更好的ANSI SQL兼容性
性能增强
基本框架(SPARK-23128)
洗牌后分区号调整(SPARK-28177)
动态子查询重用(SPARK-28753)
本地随机播放器(SPARK-28560)
偏斜连接优化(SPARK-29544)
优化读取连续的随机播放块(SPARK-9853)
其他优化器规则
规则TransposeWindow(SPARK-20636)
规则重用子查询(SPARK-27279)
规则PushDownLeftSemiAntiJoin(SPARK-19712)
规则PushLeftSemiLeftAntiThroughJoin(SPARK-19712)
规则ReplaceNullWithFalse(SPARK-25860)
在联接/聚合子查询(SPARK-29343)中无限制地消除排序
规则PruneHiveTablePartitions(SPARK-15616)
从Generate(SPARK-27707)修剪不必要的嵌套字段
规则重写NonCorrelatedExists(SPARK-29800)
最小化表缓存同步成本(SPARK-26917,SPARK-26617,SPARK-26548)
将聚合代码拆分为小函数(SPARK-21870)
在INSERT和ALTER TABLE ADD PARTITION命令中添加批处理(SPARK-29938)
允许将聚合器注册为UDAF(SPARK-27296)
切换到公历(SPARK-26651)
构建Spark自己的日期时间模式定义(SPARK-31408)
介绍用于表插入的ANSI存储分配策略(SPARK-28495)
默认情况下,在表插入中遵循ANSI存储分配规则(SPARK-28885)
添加一个SQLConf spark.sql.ansi.enabled(SPARK-28989)
支持用于聚合表达式的ANSI SQL过滤子句(SPARK-27986)
支持ANSI SQL OVERLAY函数(SPARK-28077)
支持ANSI嵌套方括号注释(SPARK-28880)
整数溢出时引发异常(SPARK-26218)
间隔算术运算的溢出检查(SPARK-30341)
将无效字符串强制转换为数字类型时抛出异常(SPARK-30292)
使间隔乘除除的溢出行为与其他操作一致(SPARK-30919)
为字符和十进制添加ANSI类型别名(SPARK-29941)
SQL Parser定义了符合ANSI的保留关键字(SPARK-26215)
启用ANSI模式时,禁止使用保留的关键字作为标识符(SPARK-26976)
支持ANSI SQL:LIKE…ESCAPE语法(SPARK-28083)
支持ANSI SQL布尔谓词语法(SPARK-27924)
更好地支持相关子查询处理(SPARK-18455)
重新设计的带有类型提示的熊猫UDF(SPARK-28264)
允许Pandas UDF接受pd.DataFrames(SPARK- 26412 )的迭代器
支持将StructType作为标量熊猫UDF(SPARK-27240)的参数和返回类型
通过Pandas UDF支持Dataframe Cogroup(SPARK-27463)
添加mapInPandas以允许DataFrames的迭代器(SPARK-28198)
某些SQL函数也应采用列名(SPARK-26979)
使PySpark SQL异常更具Pythonic(SPARK-31849)
目录插件API(SPARK-31121)
数据源V2 API重构(SPARK-25390)
Hive 3.0和3.1 Metastore支持(SPARK-27970,SPARK-24360)
将Spark插件界面扩展到驱动程序(SPARK-29396)
使用执行程序插件通过用户定义的指标扩展Spark指标系统(SPARK-28091)
扩展的列式处理支持的开发人员API(SPARK-27396)
使用DSV2的内置源迁移:parquet,ORC,CSV,JSON,Kafka,文本,Avro(SPARK-27589)
在SparkExtensions中允许功能注入(SPARK-25560)
支持高性能S3A提交者(SPARK-23977)
通过不确定性表达式修剪列(SPARK-29768)
spark.sql.statistics.fallBackToHdfs数据源表中的支持(SPARK-25474)
允许使用文件源上的子查询过滤器进行分区修剪(SPARK-26893)
避免在数据源过滤器中下推子查询(SPARK-25482)
从文件源递归加载数据(SPARK-27990)
parquet/ ORC
下推析取谓语(SPARK-27699)
通用化嵌套列修剪(SPARK-25603),并且默认情况下处于启用状态(SPARK-29805)
仅parquet
嵌套字段的parquet谓词下推(SPARK-17636)
仅限ORC
支持ORC的合并架构(SPARK-11412)
ORC的嵌套架构修剪(SPARK-27034)
谓词转换的复杂性降低了ORC(火花27105,火花28108)
将Apache ORC升级到1.5.9(SPARK-30695)
CSV
支持CSV数据源中的过滤器下推(SPARK-30323)
hiveSerde
读取带有本机数据源的Hive Serde表时无架构推断(SPARK-27119)
Hive CTAS命令应使用可转换的数据源(SPARK-25271)
使用本机数据源优化插入分区的Hive表(SPARK-28573)
kafka
添加对Kafka标头的支持(SPARK-23539)
添加Kafka授权令牌支持(SPARK-25501)
向Kafka源代码引入新选项:由时间戳偏移(开始/结束)(SPARK-26848)
在Kafka批处理源和流式源v1(SPARK-30656)中支持“ minPartitions”选项
将Kafka升级到2.4.1(SPARK-31126)
新的内置数据源
新的内置二进制文件数据源(SPARK-25348)
新的无操作批处理数据源(SPARK-26550)和无操作流接收器(SPARK-26649)
[Hydrogen] 可识别加速器的调度程序(SPARK-24615)
介绍一套完整的连接提示(SPARK-27225)
为SQL查询添加PARTITION BY提示(SPARK-28746)
Thrift服务器中的元数据处理(SPARK-28426)
向scala API添加高阶函数(SPARK-27297)
支持简单的所有收集任务任务环境(SPARK-30667)
hive UDF支持UDT类型(SPARK-28158)
在Catalyst中支持DELETE / UPDATE / MERGE运算符(SPARK-28351,SPARK-28892,SPARK-28893)
实施DataFrame.tail(SPARK-30185)
新的内置功能
sinh,cosh,tanh,asinh,acosh,atanh(SPARK-28133)
任何,每个,某些(SPARK-19851)
bit_and,bit_or(SPARK-27879)
位数(SPARK-29491)
bit_xor(SPARK-29545)
bool_and,bool_or(SPARK-30184)
count_if(SPARK-27425)
date_part(SPARK-28690)
提取物(SPARK-23903)
永远(SPARK-27905)
from_csv(SPARK-25393)
make_date(SPARK-28432)
make_interval(SPARK-29393)
make_timestamp(SPARK-28459)
map_entries(SPARK- 23935 )
map_filter(SPARK-23937)
map_zip_with(SPARK-23938)
max_by,min_by(SPARK-27653)
schema_of_csv(SPARK-25672)
to_csv(SPARK-25638)
transform_keys(SPARK-23939)
transform_values(SPARK-23940)
typeof(SPARK-29961)
版本(SPARK-29554)
xxhash64(SPARK-27099)
对现有内置功能的改进
内置的日期时间功能/操作改进(SPARK-31415)
支持from_json的FAILFAST模式(SPARK-25243)
array_sort添加一个新的比较器参数(SPARK-29020)
过滤器现在可以将索引以及元素作为输入(SPARK-28962)
新的结构化流UI(SPARK-29543)
SHS:允许将正在运行的流式应用程序的事件日志翻转(SPARK-28594)
SHS中的JDBC选项卡(SPARK-29724,SPARK-29726)
添加一个API,该API允许用户在批处理和流式查询中定义和观察任意度量(SPARK-29345)
跟踪每个查询计划时间的工具(SPARK-26129)
将基本的洗牌指标放入SQL交换运算符(SPARK-26139)
SQL语句显示在“ SQL”选项卡中,而不是呼叫站点(SPARK-27045)
将工具提示添加到SparkUI(SPARK-29449)
提高历史记录服务器的并发性能(SPARK-29043)
解释格式的命令(SPARK-27395)
支持将截断的计划和生成的代码转储到文件(SPARK-26023)
增强描述框架来描述查询的输出(SPARK-26982)
添加SHOW VIEWS命令(SPARK-31113)
改善SQL解析器的错误消息(SPARK-27901)
支持本地Prometheus监视(SPARK-29429)
将执行者内存指标添加到心跳中,并在执行者REST API中公开(SPARK-23429)
将执行程序指标和内存使用情况检测添加到指标系统(SPARK-27189)
建立SQL参考(SPARK-28588)
构建WebUI用户指南(SPARK-28372)
构建用于SQL配置文档的页面(SPARK-30510)
添加Spark配置的版本信息(SPARK-30839)
PostgreSQL的端口回归测试(SPARK-27763)
二手服务器测试范围(SPARK-28608)
测试UDF(python UDF,pandas UDF,scala UDF)的测试范围(SPARK-27921)
支持用户指定的驱动程序和执行程序窗格模板(SPARK-24434)
允许动态分配而无需外部随机播放服务(SPARK-27963)
使用K8S(SPARK-28487)进行更快速的动态分配
Kerberos对K8S上的Spark的支持(SPARK-23257)
Kubernetes资源管理器中的Kerberos支持(客户端模式)(SPARK-25815)
通过Hadoop兼容文件系统(SPARK-23153)支持客户端依赖性
在k8s后端(SPARK-26239)中添加可配置的身份验证秘密源
使用Kubernetes支持子路径安装(SPARK-25960)
将Python 3设置为K8S的PySpark绑定的默认设置(SPARK-24516)
Java 11支持(SPARK-24417)
Hadoop 3支持(SPARK-23534)
内置的Hive执行从1.2.1升级到2.3.7(SPARK-23710,SPARK-28723,SPARK-31381)
默认情况下使用Apache Hive 2.3依赖关系(SPARK-30034)
GA Scala 2.12并删除2.11(SPARK-26132)
改进在动态分配中使执行程序超时的逻辑(SPARK-20286)
随机存储的磁盘RDD块由随机播放服务提供服务,对于动态分配(SPARK-27677)被忽略
收购新的执行者以避免因黑名单而死机(SPARK-22148)
允许共享Netty的内存池分配器(SPARK-24920)
修复TaskMemoryManager和UnsafeExternalSorter $ SpillableIterator(SPARK-27338)之间的死锁
引入用于结构化流的AdmissionControl API(SPARK-30669)
Spark History主页性能改进(SPARK-25973)
加快和缩小SQL侦听器中的指标聚合(SPARK-29562)
从同一主机获取随机播放块时,请避免网络(SPARK-27651)
改进DistributedFileSystem的文件列表(SPARK-27801)
删除对hadoop 2.6的支持(SPARK-25016)
在Spark 3.0中,已弃用的类org.apache.spark.sql.streaming.ProcessingTime已被删除。使用org.apache.spark.sql.streaming.Trigger.ProcessingTime代替。同样,org.apache.spark.sql.execution.streaming.continuous.ContinuousTrigger已被删除以支持Trigger.Continuous,并且org.apache.spark.sql.execution.streaming.OneTimeTrigger已被隐藏以支持Trigger.Once。(SPARK-28199)
由于Scala 2.12的升级,DataStreamWriter.foreachBatch与Scala程序的源代码不兼容。您需要更新Scala源代码以消除Scala函数和Java lambda之间的歧义。(SPARK-26132)
编程指南:《Spark RDD编程指南》和《Spark SQL》,《数据框架和数据集指南》以及《结构化流编程指南》。
多列支持添加到Binarizer(SPARK-23578),StringIndexer(SPARK-11215),StopWordsRemover(SPARK-29808)和PySpark QuantileDiscretizer(SPARK-22796)
支持基于树的特征转换(SPARK-13677)
添加了两个新的评估器MultilabelClassificationEvaluator(SPARK-16692)和RankEvaluator(SPARK-28045)
在DecisionTreeClassifier /回归(加入样品重量支撑火花19591),RandomForestClassifier /回归(火花9478),GBTClassifier /回归(火花9612),RegressionEvaluator(火花24102),BinaryClassificationEvaluator(火花24103),BisectingKMeans(火花-30351),KMeans(SPARK-29967)和GaussianMixture(SPARK-30102)
添加了用于PowerIterationClustering的R API(SPARK-19827)
添加了用于跟踪ML管道状态的Spark ML侦听器(SPARK-23674)
适合验证集已添加到Python的Gradient Boosted Trees(SPARK-24333)
添加了RobustScaler变压器(SPARK-28399)
增加了分解机分类器和回归器(SPARK-29224)
添加了高斯朴素贝叶斯(SPARK-16872)和互补朴素贝叶斯(SPARK-29942)
Scala和Python之间的ML函数奇偶校验(SPARK-28958)
在所有的分类模型中都将predictRaw公开。除LinearSVCModel(SPARK-30358)之外,所有其他分类模型中均公开了predictProbability
行为改变
在Spark 3.0中,Pyspark中的多类logistic回归现在(正确)将返回LogisticRegressionSummary,而不是子类BinaryLogisticRegressionSummary。在这种情况下,BinaryLogisticRegressionSummary公开的其他方法无论如何都不起作用。(SPARK-31681)
在Spark 3.0中,pyspark.ml.param.shared.Has * mixins不再提供任何set (self,value)setter方法,请改用相应的self.set(self.value)。有关详细信息,请参见SPARK-29093。(SPARK-29093)
编程指南:《机器学习库(MLlib)指南》。
SparkR互操作性中的箭头优化(SPARK-26759)
通过向量化的R gapply(),dapply(),createDataFrame,collect()来提高性能
R shell,IDE(SPARK-24572)的“渴望执行”
用于电源迭代群集的R API(SPARK-19827)
行为改变
弃用Python 2支持(SPARK-27884)
弃用R ❤️.4支持(SPARK-26014)
弃用UserDefinedAggregateFunction(Spark-30423)
带dropDuplicates操作符的流查询可能无法使用Spark 2.x编写的检查点重新启动。这将在Spark 3.0.1中修复。(SPARK-31990)
在Web UI中,作业列表页面可能会挂起40秒钟以上。这将在Spark 3.0.1中修复。(SPARK-31967)
io.netty.tryReflectionSetAccessible在JDK9 +上为Arrow 设置(SPARK-29923)
通过将AWS开发工具包SDK升级到1.11.655,我们强烈建议在Hadoop 2.7.3上使用S3N文件系统(基于jets3t库的开源NativeS3FileSystem)的用户升级以使用AWS Signature V4并设置存储桶终结点或迁移到S3A(前缀“ s3a://”)-jets3t库默认使用AWS v2,并使用s3.amazonaws.com作为端点。否则,在以下情况下可能会引发403 Forbidden错误:
如果用户访问包含“ +”字符的S3路径并使用旧版S3N文件系统,例如s3n:// bucket / path / + file。
如果用户已配置AWS V2签名以使用S3N文件系统签署对S3的请求。
请注意,如果您使用S3AFileSystem,例如(“ s3a:// bucket / path”)来访问S3Select或SQS连接器中的S3,则一切都会按预期进行。(SPARK-30968)
如果年份字段丢失,则使用模式字母’D’解析一年中的日期将返回错误的结果。这可能发生在SQL函数中,例如to_timestamp使用模式字符串将datetime字符串解析为datetime值的SQL函数。这将在Spark 3.0.1中修复。(SPARK-31939)
如果键的值为-0.0和0.0,则子查询内的Join / Window / Aggregate可能导致错误的结果。这将在Spark 3.0.1中修复。(SPARK-31958)
窗口查询可能会因模棱两可的自联接错误意外失败。这将在Spark 3.0.1中修复。(SPARK-31956)