天天看點

sparksql 概述

sparksql 概述

什麼是Spark SQL?

Spark SQL是Spark用來處理結構化資料的一個子產品,它提供了2個程式設計抽象:DataFrame和DataSet,并且作為分布式SQL查詢引擎的作用。

sparksql 概述

我們已經學習了Hive,它是将Hive SQL轉換成MapReduce然後送出到叢集上執行,大大簡化了編寫MapReduc的程式的複雜性,由于MapReduce這種計算模型執行效率比較慢。所有Spark SQL的應運而生,它是将Spark SQL轉換成RDD,然後送出到叢集執行,執行效率非常快!

sparksql 概述

Spark SQL的特點

1)易整合

sparksql 概述

2)統一的資料通路方式

sparksql 概述

3)相容Hive

sparksql 概述

4)标準的資料連接配接

sparksql 概述
sparksql 概述

什麼是DataFrame?

與RDD類似,DataFrame也是一個分布式資料容器。然而DataFrame更像傳統資料庫的二維表格,除了資料以外,還記錄資料的結構資訊,即schema。

同時,與Hive類似,DataFrame也支援嵌套資料類型(struct、array和map)。從API易用性的角度上看,DataFrame API提供的是一套高層的關系操作,比函數式的RDD API要更加友好,門檻更低。

sparksql 概述

上圖直覺地展現了DataFrame和RDD的差別。左側的RDD[Person]雖然以Person為類型參數,但Spark架構本身不了解Person類的内部結構。而右側的DataFrame卻提供了詳細的結構資訊,使得Spark SQL可以清楚地知道該資料集中包含哪些列,每列的名稱和類型各是什麼。

DataFrame是為資料提供了Schema的視圖。可以把它當做資料庫中的一張表來對待,DataFrame也是懶執行的。性能上比RDD要高,主要原因:

優化的執行計劃:查詢計劃通過Spark catalyst optimiser(Spark的優化器)進行優化。

sparksql 概述

比如下面一個例子:

sparksql 概述
sparksql 概述

為了說明查詢優化,我們來看上圖展示的人口資料分析的示例。圖中構造了兩個DataFrame,将它們join之後又做了一次filter操作。如果原封不動地執行這個執行計劃,最終的執行效率是不高的。因為join是一個代價較大的操作,也可能會産生一個較大的資料集。如果我們能将filter下推到 join下方,先對DataFrame進行過濾,再join過濾後的較小的結果集,便可以有效縮短執行時間。而Spark SQL的查詢優化器正是這樣做的。

簡而言之,邏輯查詢計劃優化就是一個利用基于關系代數的等價變換,将高成本的操作替換為低成本操作的過程。

sparksql 概述

什麼是DataSet?

1)是Dataframe API的一個擴充,是Spark最新的資料抽象。

2)使用者友好的API風格,既具有類型安全檢查也具有Dataframe的查詢優化特性。

3)Dataset支援編解碼器,當需要通路非堆上的資料時可以避免反序列化整個對象,提高了效率。

4)樣例類被用來在Dataset中定義資料的結構資訊,樣例類中每個屬性的名稱直接映射到DataSet中的字段名稱。

上一篇: 配置Hadoop
下一篇: 書單

繼續閱讀