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

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

Apache Spark 3.0.0

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

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參考文檔

把這些功能按照模塊來劃分就可以分爲以下幾個模塊:

  • 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兼容性增強

  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. BinarizerStringIndexerStopWordsRemoverPySpark 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了。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章