Spark SQL 中 dataFrame 學習總結

dataFrame多了數據的結構信息。就是schema。
編程

RDD是分佈式的 Java對象的集合。DataFrame是分佈式的Row對象的集合。框架

DataFrame 提供了詳細的結構信息,可讓sparkSQL清楚的知道數據集中包含哪些列,列的名稱和類型各是什麼?分佈式

    

RDD是分佈式的 Java對象的集合。DataFrame是分佈式的Row對象的集合。DataFrame除了提供了ide

比RDD更豐富的算子之外,更重要的特色是提高執行效率、減小數據讀取以及執行計劃的優化,好比函數

filter下推、裁剪等。大數據

提高執行效率優化

RDD API是函數式的,強調不變性,在大部分場景下傾向於建立新對象而不是修改老對象。這一特色雖然spa

帶來了乾淨整潔的API,卻也使得Spark應用程序在運行期傾向於建立大量臨時對象,對GC形成壓力。在對象

現有RDD API的基礎之上,咱們當然能夠利用mapPartitions方法來重載RDD單個分片內的數據建立方式接口

     

用複用可變對象的方式來減少對象分配和GC的開銷,但這犧牲了代碼的可讀性,並且要求開發者對Spark

運行時機制有必定的瞭解,門檻較高。另外一方面,Spark SQL在框架內部已經在各類可能的狀況下儘可能重

用對象,這樣作雖然在內部會打破了不變性,但在將數據返回給用戶時,還會從新轉爲不可變數據。利

用 DataFrame API進行開發,能夠免費地享受到這些優化效果。

減小數據讀取

分析大數據,最快的方法就是 ——忽略它。這裏的「忽略」並非熟視無睹,而是根據查詢條件進行恰

當的剪枝。

上文討論分區表時提到的分區剪 枝即是其中一種——當查詢的過濾條件中涉及到分區列時,咱們能夠根

據查詢條件剪掉確定不包含目標數據的分區目錄,從而減小IO。

對於一些「智能」數據格 式,Spark SQL還能夠根據數據文件中附帶的統計信息來進行剪枝。簡單來

說,在這類數據格式中,數據是分段保存的,每段數據都帶有最大值、最小值、null值數量等 一些基本

的統計信息。當統計信息表名某一數據段確定不包括符合查詢條件的目標數據時,該數據段就能夠直接

跳過(例如某整數列a某段的最大值爲100,而查詢條件要求a > 200)。

此外,Spark SQL也能夠充分利用RCFile、ORC、Parquet等列式存儲格式的優點,僅掃描查詢真正涉及的

列,忽略其他列的數據。

       

Dataset能夠認爲是DataFrame的一個特例,主要區別是Dataset每個record存儲的是一個強類型值而不

是一個Row。所以具備以下三個特色:

DataSet能夠在編譯時檢查類型

而且是面向對象的編程接口


DataFrame是面向sparkSQL的接口。

DataFrame和dataSet能夠相互轉化。

df.as[ElementType] 這樣能夠把DataFrame轉化爲DataSet,

ds.toDF() 這樣能夠把DataSet轉化爲DataFrame。

相關文章
相關標籤/搜索