天天看點

第56課:Spark SQL和DataFrame的本質

一、Spark SQL與Dataframe

Spark SQL之是以是除Spark core以外最大和最受關注的元件的原因:

a) 能處理一切存儲媒體和各種格式的資料(你同時可以友善的擴充Spark SQL的功能來支援更多的資料類型,例如KUDO)

b)Spark SQL 把資料倉庫的計算能力推向了一個新的高度。不僅是無敵的計算速度(Spark SQL比Shark快了一個數量級,Shark比Hive快了一個數量級),尤其是在tungsten成熟以後會更加無可匹敵。更為重要的是把資料倉庫的計算複雜度推向了曆史新高度(Spark後續推出的Dataframe可以讓資料倉庫直接使用機器學習、圖計算等算法庫來對資料倉庫進行深度資料價值的挖掘)。

c)Spark SQL(Dataframe,DataSet)不僅是資料倉庫的引擎,同時也是資料挖掘的引擎,更為重要的是Spark SQL是科學計算和分析的引擎。

d)後來的DataFrame讓Spark SQL一舉成為大資料計算引擎的技術上的霸主(尤其是在鎢絲計劃的強力支援下)。

e) Hive+Spark SQL+DataFrame

 1) Hive負責廉價的資料存儲

 2) Spark SQL 負責高速的計算

 3)DataFrame 負責複雜的資料挖掘

二、DataFrame與RDD

a)R和Python中都有DataFrame,Spark中的DataFrame從形式上看,最大的不同點就是其天生是分布式的;你可以簡單的認為DataFrame是一個分布式的Table,形式如下:

Name

Age

Tel

String

Int

Long

而RDD的形式如下:

Person

RDD不知道資料行的屬性,而DataFrame知道資料的列資訊

b)RDD和DataFrame的根本差異

  RDD以record為基本機關,Spark在處理RDD時無法優化RDD的内部細節,是以也就無法進行更深入的優化,這極大的限制了Spark SQL的性能。

 DataFrame中包含了每個record的metadata資訊,也就是說DataFrame優化時基于列内部優化,而不像RDD基于行進行優化。

三、Spark企業級最佳實踐

階段1 檔案系統+C語言處理

階段2 JavaEE + 傳統資料庫(擴充性太差,不支援分布式。即便有部分資料庫支援分布式,但是因為事務一緻性的關系,速度非常慢)

階段3 Hive hive的計算能力有限,速度非常慢。

階段4 Hive轉向Hive+Spark SQL 

階段5 Hive+Spark SQL+DataFrame

階段6 Hive+Spark SQL+DataFrame+DataSet 

繼續閱讀