Spark 3.0發佈啦,改進SQL,棄Python 2,增強擴展,性能大幅提升

Apache Spark 3.0.0正式發佈啦,Apache Spark 3.0是在Spark 2.x的基礎上開發的,帶來了新的想法和功能。

Spark 3.0發佈啦,改進SQL,棄Python 2,增強擴展,性能大幅提升

Apache Spark 3.0.0


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發佈啦,改進SQL,棄Python 2,增強擴展,性能大幅提升

Python


以下便是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

突出功能

  1. 加速器感知調度器;
  2. 自適應查詢;
  3. 動態分區修剪;
  4. 重新設計的pandas UDF API與類型提示;
  5. 結構化流用戶界面;
  6. 目錄插件API的支持;
  7. 支持Java 11;
  8. 支持Hadoop 3;
  9. 能夠更好的兼容ANSI SQL;

性能提升

  1. 自適應查詢;
  2. 動態分區修剪;
  3. 優化9項規則;
  4. 最小化表緩存同步性能優化;
  5. 將聚合代碼分割成小函數;
  6. 在INSERT和ALTER TABLE ADD PARTITION命令中增加批處理;
  7. 允許聚合器註冊為UDAF;

SQL兼容性增強

  1. 使用Proleptic Gregorian日曆;
  2. 建立Spark自己的日期時間模式定義;
  3. 為表插入引入ANSI存儲分配策略;
  4. 在表插入中默認遵循ANSI存儲分配規則;
  5. 添加一個SQLConf: spark.sql.ansi.enabled,用於開啟ANSI模式;
  6. 支持聚合表達式的ANSI SQL過濾子句;
  7. 支持ANSI SQL OVERLAY功能;
  8. 支持ANSI嵌套方括號內的註釋;
  9. 超出整數範圍時拋出異常;
  10. 區間算術運算的溢出檢查;
  11. 當無效字符串被轉換為數字類型時,拋出異常;
  12. 使用區間乘法和除法的溢出行為與其他操作一致;
  13. 為char和decimal添加ANSI類型的別名;
  14. SQL解析器定義了ANSI兼容的保留關鍵字;
  15. 當ANSI模式開啟時,禁止使用保留關鍵字作為標識符;
  16. 支持ANSI SQL.LIKE...ESCAPE語法;
  17. 支持ANSI SQL布爾-謂詞語法;

PySpark增強版

  1. 重新設計的pandas UDFs,並提供類型提示;
  2. 允許Pandas UDF採用pd.DataFrames的迭代器;
  3. 支持StructType作為Scalar Pandas UDF的參數和返回類型;
  4. 通過Pandas UDFs支持Dataframe Cogroup;
  5. 增加mapInPandas,允許DataFrames的迭代器;
  6. 部分SQL函數也應該取數據列名;
  7. 讓PySpark的SQL異常更加Pythonic化;

擴展性增強

  1. 目錄插件;
  2. 數據源V2 API重構;
  3. Hive 3.0和3.1的版本的元存儲支持;
  4. 將Spark插件接口擴展到驅動程序;
  5. 可通過自定義指標來擴展Spark指標系統;
  6. 為用於擴展列式處理支持提供了開發者API;
  7. 使用DSV2的內置源遷移:parquet, ORC, CSV, JSON, Kafka, Text, Avro;
  8. 允許在SparkExtensions中注入函數;

連接器增強

  1. 在數據源表中支持spark.sql.statistics.fallBackToHdfs;
  2. 升級Apache ORC到1.5.9;
  3. 支持CSV數據源的過濾器;
  4. 使用本地數據源優化插入分區Hive表;
  5. 升級Kafka到2.4.1;
  6. 新的內置二進制文件數據源,新的無操作批處理數據源和無操作流接收器;

K8s中的原生Spark應用

  1. 使用K8S進行更靈敏的動態分配,並在K8S上增加對Spark的Kerberos支持;
  2. 使用Hadoop兼容的文件系統支持客戶端依賴性;
  3. 在k8s後臺增加可配置的認證秘密源;
  4. 支持Kubernetes的子路徑掛載;
  5. 在PySpark Bindings for K8S中把Python 3作為默認選項;

MLib

  1. 為Binarizer 、StringIndexer 、StopWordsRemover 和PySpark QuantileDiscretizer添加了多列支持;
  2. 支持基於樹的特徵轉換;
  3. 增加了兩個新的評估器MultilabelClassificationEvaluator和RankingEvaluator;
  4. 增加了PowerIterationClustering的R API;
  5. 添加了用於跟蹤ML管道狀態的Spark ML監聽器;
  6. 在Python中的梯度提升樹中添加了帶有驗證集的擬合。
  7. 增加了RobustScaler變壓器;
  8. 添加了因子化機器分類器和迴歸器;
  9. 增加了高斯奈夫貝葉斯和互補奈夫貝葉斯;

此外,在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了。

老夫雖不正經,但老夫一身的才華!關注我,獲取更過編程科技知識。


分享到:


相關文章: