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後臺增加可配置的認證秘密源;
- 支持Kubernetes的子路徑掛載;
- 在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了。
老夫雖不正經,但老夫一身的才華!關注我,獲取更過編程科技知識。