RDD 和DF
- 聯繫
- 都是彈性分佈式數據集,輕量集
- 惰性機制,延遲計算
- 根據內存情況,自動緩存,加快計算速度
- 都有partition概念
- 衆多相同的算子
- 區別
DF引入了schema和off-heap
schema RDD每一行的數據結構都是一樣的
off-heap 意味着JVM堆以外的內存
- RDD
優點:
-
強大,內置很多函數操作,group,map,filter等,方便處理結構化或非結構化數據
-
面向對象編程,直接存儲的java對象,類型轉化也安全
缺點:
-
由於它基本和hadoop一樣萬能的,因此沒有針對特殊場景的優化,比如對於結構化數據處理相對於sql來比非常麻煩
-
默認採用的是java序列號方式,序列化結果比較大,而且數據存儲在java堆內存中,導致gc比較頻繁。
- DF
優點:
-
結構化數據處理非常方便,支持Avro, CSV, elastic search, and Cassandra等kv數據,也支持HIVE tables, MySQL等傳統數據表
-
有針對性的優化,由於數據結構元信息spark已經保存,序列化時不需要帶上元信息,大大的減少了序列化大小,而且數據保存在堆外內存中,減少了gc次數。
-
hive兼容,支持hql,udf等
缺點:
-
編譯時不能類型轉化安全檢查,運行時才能確定是否有問題
-
對於對象支持不友好,rdd內部數據直接以java對象存儲,dataframe內存存儲的是row對象而不能是自定義對象