本文講講Spark SQL的幾個里程碑的更新升級。

1. spark 1.0.0誕生了Spark SQL

官方版本是spark 1.0.0引入的Spark SQL模塊。當時這個模塊的核心實際上就是一種新類型的RDD,叫做SchemaRDD。SchemaRDD就是類型為ROW的RDD,但同時又包含了一個描述每一列數據類型的schema信息。SchemRDD也可類似於傳統資料庫的一張表。SchemaRDD可以從已有的RDD創建,可以是Parquet文件,json數據集或則HiveQL生成。該版本引入是在2014年五月30日。

2. Spark 1.2.0誕生了ML機器學習庫

Ml機器學習庫是基於SchemaRDD的,後來的版本是基於Dataframe的,可以直接與Spark SQL進行交互。

3. Spark 1.3.0 誕生了Dataframe

Spark 1.3的時候做了一個重大變革。就是將SchemaRDD重命名為了DataFrame,主要原因是DataFrame不再直接繼承自RDD,而是自己維護和實現了自己的功能函數。但是DataFrame可以通過調用 .rdd 轉化為RDD。

4. spark 1.6.0誕生了Dataset和SparkSession

Spark 1.6的時候也是有了重大調整,增加了Dataset的概念,類似RDD,在享受Spark SQL執行引擎性能優化的同時允許用戶使用自定義對象和lambda函數。

在引入Dataset的同時,也引入了SparkSession,也即是會話管理功能,允許不同用戶可以在使用不同配置和臨時表的情況下共享統一的集群。

5. Spark 2.0.0誕生了Strcutured Streaming

Spark 2.0開始,Dataset API和Dataframe API統一了。Scala版本,DataFrame被類型定義成Dataset[Row],java版本必須是要Dataset[Row]代替Dataframe。

SparkSession已經完全替換掉了舊的SQLContext和HiveContext。SQLContext和HiveContext為了保持兼容還在被保留。

上線了Structured Streaming。這個是Spark 流處理髮展的主要方向,底層是基於Spark SQL 和 Catalyst 優化器,讓用戶像使用靜態Dataset開發離線處理任務一樣使用流Dataset開發流處理業務,這個就是依賴於Catalyst 優化器自動增量的查詢計劃。

從自Spark 2.x依賴的更新狀態來看,Spark SQL及Catalyst 優化器已經成為Spark框架努力的方向,主要體現在:

1). 逐步廢棄掉基於RDD的mllib機器學習庫,著重發展基於DataFrame的ml庫。目前是,基於RDD的機器學習庫處於保留狀態,後期會廢棄。

2). Spark2.4.0 未對Spark Streaming(RDD-based)做進一步更新。Structured Streaming(dataframe-based)被大力優化更新,也有取代Spark Streaming之勢頭。

所以,spark 使用及愛好者要大力掌握好Spark SQL和Structured Streaming。

那麼是不是就不要深入學習Spark Core和Spark Streaming了呢?

答案是否定的!

Spark Core是Spark SQL的基石,所以很有必要掌握好Spark Core。

Spark SQL和Structured Streaming處理的是結構化數據,非結構化數據,還是需要Spark Core和Spark Streaming進行解析處理。

Structured Streaming 的功能還不夠完善,限制頗多,比如多流join之後不能聚合等,所以Spark Streaming的給用戶以靈活處理的介面還是有用武之地的。

推薦閱讀:

大數據啊大數據!

如何成為一個優秀的工程師?

解惑:這個SPARK任務是數據傾斜了嗎?


推薦閱讀:
相关文章