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
了。
老夫雖不正經,但老夫一身的才華!關注我,獲取更多編程科技知識。