首頁技術文章正文

DataFrame是什么?與RDD有什么區(qū)別?

更新時間:2021-03-23 來源:黑馬程序員 瀏覽量:

DataFrame被稱為SchemaRDD。DataFrame使Spark具備了處理大規(guī)模結構化數據的能力。在Spark中,DataFrame是一種以RDD為基礎的分布式數據集,因此DataFrame可以完成RDD的絕大多數功能,在開發(fā)使用時,也可以調用方法將RDD和DataFrame進行相互轉換。DataFrame的結構類似于傳統(tǒng)數據庫的二維表格,并且可以從很多數據源中創(chuàng)建,例如結構化文件、外部數據庫、Hive表等數據源。下面,通過圖1來了解DataFrame與RDD在結構上的區(qū)別。

1616470817236_DataFrame與RDD區(qū)別.jpg

DataFrame與RDD區(qū)別

在圖1中,左側為RDD[Person]數據集,右側是DataFrame數據集。DataFrame可以看作是分布式的Row對象的集合,在二維表數據集的每一列都帶有名稱和類型,這就是Schema元信息,這使得Spark框架可以獲取更多的數據結構信息,從而對在DataFrame背后的數據源以及作用于DataFrame之上數據變換進行了針對性的優(yōu)化,最終達到大幅提升計算效率;同時,DataFrame與Hive類似,支持嵌套數據類型(例如Struct、Array、Map)。

RDD是分布式的Java對象的集合,例如圖4-3中的RDD[Person]數據集,雖然它以Person為類型參數,但是對象內部之間的結構相對于Spark框架本身是無法得知的,這樣在轉換數據形式時效率相對較低。

總的來說,DataFrame除了提供比RDD更豐富的算子以外,更重要的特點是提升Spark框架執(zhí)行效率、減少數據讀取時間以及優(yōu)化執(zhí)行計劃。有了DataFrame這個更高層次的抽象后,處理數據就更加簡單了,甚至可以直接用SQL來處理數據,這對于開發(fā)者來說,易用性有了很大的提升。不僅如此,通過DataFrame API或SQL處理數據,Spark 優(yōu)化器(Catalyst)會自動優(yōu)化,即使我們寫的程序或SQL不高效,程序也可以高效的執(zhí)行。



猜你喜歡:

YARN的體系結構的工作流程是怎樣的?

RDD如何分區(qū),各種模式下的分區(qū)數目是怎樣的?

Hadoop生態(tài)體系有哪些子系統(tǒng)?    

RDD數據丟失后如何恢復?RDD容錯機制介紹

黑馬程序員大數據開發(fā)培訓班

分享到:
在線咨詢 我要報名
和我們在線交談!