不多說,直接上干貨!
DataFrame的推出,讓Spark具備了處理大規模結構化數據的能力,不僅比原有的RDD轉化方式更加簡單易用,而且獲得了更高的計算性能。Spark能夠輕松實現從MySQL到DataFrame的轉化,並且支持SQL查詢。
圖 DataFrame與RDD的區別
從上面的圖中可以看出DataFrame和RDD的區別。
RDD是分布式的 Java對象的集合,比如,RDD[Person]是以Person為類型參數,但是,Person類的內部結構對於RDD而言卻是不可知的。
DataFrame是一種以RDD為基礎的分布式數據集,也就是分布式的Row對象的集合(每個Row對象代表一行記錄),提供了詳細的結構信息,也就是我們經常說的模式(schema),Spark SQL可以清楚地知道該數據集中包含哪些列、每列的名稱和類型。
和RDD一樣,DataFrame的各種變換操作也采用惰性機制,只是記錄了各種轉換的邏輯轉換路線圖(是一個DAG圖),不會發生真正的計算,這個DAG圖相當於一個邏輯查詢計划,最終,會被翻譯成物理查詢計划,生成RDD DAG,按照之前介紹的RDD DAG的執行方式去完成最終的計算得到結果。