sparkSQL中RDD——DataFrame——DataSet的區別


 

spark中RDD、DataFrame、DataSet都是spark的數據集合抽象,RDD針對的是一個個對象,但是DF與DS中針對的是一個個Row

 

RDD

優點:
編譯時類型安全
編譯時就能檢查出類型錯誤
面向對象的編程風格
直接通過類名點的方式來操作數據

缺點:
序列化和反序列化的性能開銷
無論是集群間的通信,還是IO操作都需要對對象的結構和數據進行序列化和反序列化
GC的性能開銷,頻繁的創建和銷毀對象,勢必會增加GC開銷

 

DataFrame
DataFrame引入了schema和off-heap

schema:RDD每一行的數據,結構都是一樣的,這個結構就存儲在schema中,Spark通過schame就能夠讀懂數據, 因此在通信和IO時就只需要序列化和反序列化數據,而結構的部分就可以省略了

off-heap:意味着JVM堆以外的內存,這些內存直接受操作系統管理(而不是JVM),Spark能夠以二進制的形式序列化數據(不包括結構)到off-heap中, 當要操作數據時, 就直接操作off-heap內存,由於Spark理解schema, 所以知道該如何操作

off-heap就像地盤,schema就像地圖,Spark有地圖又有自己地盤了,就可以自己說了算了,不再受JVM的限制,也就不再收GC的困擾了

通過schema和off-heap,DataFrame解決了RDD的缺點,但是卻丟了RDD的優點,DataFrame不是類型安全的,API也不是面向對象風格的

 

DataSet
DataSet結合了RDD和DataFrame的優點,並帶來的一個新的概念Encoder

當序列化數據時,Encoder產生字節碼與off-heap進行交互,能夠達到按需訪問數據的效果,而不用反序列化整個對象
Spark還沒有提供自定義Encoder的API,但是未來會加入

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM