Spark 3.0發佈啦,改進SQL,棄Python 2,更好的兼容ANSI SQL,性能大幅提高

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

Apache Spark 3.0.0

Spark是一個開源的大數據處理、數據科學、機器學習和數據分析工做負載的統一引擎,自2010年首次發佈以來,已經成長爲最活躍的開源項目之一;支持Java、Scala、Python、R等語言,併爲這些語言提供了相關的SDKshell

Spark 3.0中的Spark SQL是這個版本中最活躍的組件,46%的已解決的問題都是是針對Spark SQL的,包括結構化流和MLlib,以及高層API,包括SQLDataFrames。在通過了大量優化後,Spark 3.0的性能比Spark 2.4快了大約2倍。編程

Python是目前Spark上使用最普遍的語言;針對Python語言提供的PySparkPyPI上的月下載量超過500萬。在Spark 3.0中,對PySpark的功能和可用性作了很多改進,包括用Python類型提示從新設計pandas UDF API,新的pandas UDF類型,以及更多的Pythonic錯誤處理。緩存

Python

如下即是Spark 3.0中的功能亮點:包括自適應查詢執行,動態分區修剪,ANSI SQL合規性,pandas API的重大改進,結構化流的新UI,調用R用戶定義函數的速度提升了40倍,加速器感知的調度器,以及SQL參考文檔性能優化

把這些功能按照模塊來劃分就能夠分爲如下幾個模塊:app

  • core、Spark SQL、Structured Streaming
  • MLlib
  • SparkR
  • GraphX
  • 放棄Python 2R 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. INSERTALTER TABLE ADD PARTITION命令中增長批處理;
  7. 容許聚合器註冊爲UDAF

SQL兼容性加強oop

  1. 使用Proleptic Gregorian日曆;
  2. 創建Spark本身的日期時間模式定義;
  3. 爲表插入引入ANSI存儲分配策略;
  4. 在表插入中默認遵循ANSI存儲分配規則;
  5. 添加一個SQLConfspark.sql.ansi.enabled,用於開啓ANSI模式;
  6. 支持聚合表達式的ANSI SQL過濾子句;
  7. 支持ANSI SQL OVERLAY功能;
  8. 支持ANSI嵌套方括號內的註釋;
  9. 超出整數範圍時拋出異常;
  10. 區間算術運算的溢出檢查;
  11. 當無效字符串被轉換爲數字類型時,拋出異常;
  12. 使用區間乘法和除法的溢出行爲與其餘操做一致;
  13. chardecimal添加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. PySparkSQL異常更加Pythonic化;

擴展性加強

  1. 目錄插件;
  2. 數據源V2 API重構;
  3. Hive 3.03.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 ORC1.5.9
  3. 支持CSV數據源的過濾器;
  4. 使用本地數據源優化插入分區Hive表;
  5. 升級Kafka2.4.1
  6. 新的內置二進制文件數據源,新的無操做批處理數據源和無操做流接收器;

K8s中的原生Spark應用

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

MLib

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

此外,在Spark 3.0中,Pyspark中的多類邏輯迴歸如今將返回LogisticRegressionSummary,而不是其子類BinaryLogisticRegressionSummarypyspark.ml.param.shared.Has* mixins也再也不提供任何set(self, value)setter方法,而是使用各自的self.set(self., value)代替。

SparkR

經過矢量化的R gapply()dapply()createDataFramecollect()提升性能來優化SparkR的互操做性;

還有 "eager execution "的R shellIDE以及迭代聚類的R API

棄用組件

  1. 棄用Python 2的支持;
  2. 棄用R 3.4如下版本的支持;
  3. 棄用Deprecate UserDefinedAggregateFunction

這次的Spark 3.0也算是一個大版本,不只帶來了很多新功能、也修復了不少已知的問題,在性能上有了很大的提高。

自從Python官方宣佈中止維護Python2以後,各大組件也是紛紛響應,都中止了Python的支持,各位項目學習Python的小夥伴也是能夠考慮直接學習Python 3了。

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

相關文章
相關標籤/搜索