SparkSQL中 RDD、DataFrame、DataSet三者的區別與聯繫

RDD

RDD:彈性分佈式數據集;不可變、可分區、元素可以並行計算的集合。
優點:
RDD編譯時類型安全:編譯時能檢查出類型錯誤;
面向對象的編程風格:直接通過類名點的方式操作數據。
缺點:
序列化和反序列化的性能開銷很大,大量的網絡傳輸;
構建對象佔用了大量的heap堆內存,導致頻繁的GC(程序進行GC時,所有任務都是暫停)

DataFrame

DataFrame以RDD爲基礎的分佈式數據集。
優點:
DataFrame帶有元數據schema,每一列都帶有名稱和類型。
DataFrame引入了off-heap,構建對象直接使用操作系統的內存,不會導致頻繁GC。
DataFrame可以從很多數據源構建;
DataFrame把內部元素看成Row對象,表示一行行的數據。
DataFrame=RDD+schema
缺點:
編譯時類型不安全;
不具有面向對象編程的風格。

Dataset

DataSet包含了DataFrame的功能,Spark2.0中兩者統一,DataFrame表示爲DataSet[Row],即DataSet的子集。
(1)DataSet可以在編譯時檢查類型;
(2)並且是面向對象的編程接口。
(DataSet 結合了 RDD 和 DataFrame 的優點,並帶來的一個新的概念 Encoder。當序列化數據時,Encoder 產生字節碼與 off-heap 進行交互,能夠達到按需訪問數據的效果,而不用反序列化整個對象。)。
三者之間的轉換:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章