大數(shù)據(jù)覆蓋的技術(shù)點有很多,其中spark框架就是其中一種,本期小編為大家介紹的大數(shù)據(jù)培訓(xùn)教程就是關(guān)于Spark框架中RDD和DataFrame的區(qū)別是什么?RDD(提供了一種高度受限的共享內(nèi)存模型;DataFrame是一種分布式的數(shù)據(jù)集,并且以列的方式組合的。在spark中RDD、DataFrame是最常用的數(shù)據(jù)類型,在使用的過程中你知道兩者的區(qū)別和各自的優(yōu)勢嗎?關(guān)于如何具體的應(yīng)用今天就好好的分析一下。
大數(shù)據(jù)之Spark框架中RDD和DataFrame的區(qū)別:
一、RDD、DataFrame分別是什么?
1、什么是RDD?
RDD(Resilient Distributed Datasets)提供了一種高度受限的共享內(nèi)存模型。即RDD是只讀的記錄分區(qū)的集合,只能通過在其他RDD執(zhí)行確定的轉(zhuǎn)換操作(如map、join和group by)而創(chuàng)建,然而這些限制使得實現(xiàn)容錯的開銷很低。RDD仍然足以表示很多類型的計算,包括MapReduce和專用的迭代編程模型(如Pregel)等。
2、什么是DataFrame?
DataFrame是一種分布式的數(shù)據(jù)集,并且以列的方式組合的。類似于關(guān)系型數(shù)據(jù)庫中的表。可以說是一個具有良好優(yōu)化技術(shù)的關(guān)系表。DataFrame背后的思想是允許處理大量結(jié)構(gòu)化數(shù)據(jù)。提供了一些抽象的操作,如select、filter、aggregation、plot。DataFrame包含帶schema的行。schema是數(shù)據(jù)結(jié)構(gòu)的說明。相當(dāng)于具有schema的RDD。
二、RDD、DataFrame有什么特性?
在Apache Spark 里面DF 優(yōu)于RDD,但也包含了RDD的特性。RDD和DataFrame的共同特征是不可性、內(nèi)存運行、彈性、分布式計算能力。
它允許用戶將結(jié)構(gòu)強加到分布式數(shù)據(jù)集合上。因此提供了更高層次的抽象。我們可以從不同的數(shù)據(jù)源構(gòu)建DataFrame。例如結(jié)構(gòu)化數(shù)據(jù)文件、Hive中的表、外部數(shù)據(jù)庫或現(xiàn)有的RDDs。DataFrame的應(yīng)用程序編程接口(api)可以在各種語言中使用,包括Python、Scala、Java和R。
1、RDD五大特性:
1.(必須的)可分區(qū)的: 每一個分區(qū)對應(yīng)就是一個Task線程。
2.(必須的)計算函數(shù)(對每個分區(qū)進(jìn)行計算操作)。
3.(必須的)存在依賴關(guān)系。
4.(可選的)對于key-value數(shù)據(jù)存在分區(qū)計算函數(shù)。
5.(可選的)移動數(shù)據(jù)不如移動計算(將計算程序運行在離數(shù)據(jù)越近越好)。
2、DataFrame特性:
1.支持從KB到PB級的數(shù)據(jù)量
2.支持多種數(shù)據(jù)格式和多種存儲系統(tǒng)
3.通過Catalyst優(yōu)化器進(jìn)行先進(jìn)的優(yōu)化生成代碼
4.通過Spark無縫集成主流大數(shù)據(jù)工具與基礎(chǔ)設(shè)施
5.API支持Python、Java、Scala和R語言
三、RDD與DataFrame的區(qū)別
RDD是彈性分布式數(shù)據(jù)集,數(shù)據(jù)集的概念比較強一點。容器可以裝任意類型的可序列化元素(支持泛型)RDD的缺點是無從知道每個元素的【內(nèi)部字段】信息。意思是下圖不知道Person對象的姓名、年齡等。
DataFrame也是彈性分布式數(shù)據(jù)集,但是本質(zhì)上是一個分布式數(shù)據(jù)表,因此稱為分布式表更準(zhǔn)確。DataFrame每個元素不是泛型對象,而是Row對象。
DataFrame的缺點是Spark SQL DataFrame API 不支持編譯時類型安全,因此,如果結(jié)構(gòu)未知,則不能操作數(shù)據(jù);同時,一旦將域?qū)ο筠D(zhuǎn)換為Data frame ,則域?qū)ο蟛荒苤貥?gòu)。
DataFrame=RDD-【泛型】+schema+方便的SQL操作+【catalyst】優(yōu)化
DataFrame本質(zhì)上是一個【分布式數(shù)據(jù)表】
DataFrame優(yōu)于RDD,因為它提供了內(nèi)存管理和優(yōu)化的執(zhí)行計劃。總結(jié)為以下兩點:
a.自定義內(nèi)存管理:當(dāng)數(shù)據(jù)以二進(jìn)制格式存儲在堆外內(nèi)存時,會節(jié)省大量內(nèi)存。除此之外,沒有垃圾回收(GC)開銷。還避免了昂貴的Java序列化。因為數(shù)據(jù)是以二進(jìn)制格式存儲的,并且內(nèi)存的schema是已知的。
b.優(yōu)化執(zhí)行計劃:這也稱為查詢優(yōu)化器。可以為查詢的執(zhí)行創(chuàng)建一個優(yōu)化的執(zhí)行計劃。優(yōu)化執(zhí)行計劃完成后最終將在RDD上運行執(zhí)行。
如果您想了解更多關(guān)于千鋒教育或者大數(shù)據(jù)培訓(xùn)教程,可以咨詢我們的客服小姐姐,他們會為您做詳細(xì)的解答。