大數(shu)據(ju)覆(fu)蓋的(de)(de)(de)技術點有很多,其中(zhong)spark框架(jia)就(jiu)是(shi)其中(zhong)一種,本期(qi)小編(bian)為(wei)大家介(jie)紹的(de)(de)(de)教程就(jiu)是(shi)關(guan)(guan)于Spark框架(jia)中(zhong)RDD和DataFrame的(de)(de)(de)區別是(shi)什么(me)?RDD(提供(gong)了一種高(gao)度受限的(de)(de)(de)共享內存模型(xing);DataFrame是(shi)一種分布式的(de)(de)(de)數(shu)據(ju)集,并且以列的(de)(de)(de)方式組合(he)的(de)(de)(de)。在spark中(zhong)RDD、DataFrame是(shi)最常用(yong)(yong)的(de)(de)(de)數(shu)據(ju)類型(xing),在使用(yong)(yong)的(de)(de)(de)過程中(zhong)你知(zhi)道兩(liang)者的(de)(de)(de)區別和各(ge)自(zi)的(de)(de)(de)優勢嗎?關(guan)(guan)于如何具體的(de)(de)(de)應用(yong)(yong)今天就(jiu)好好的(de)(de)(de)分析一下(xia)。
大數據之(zhi)Spark框架中RDD和DataFrame的(de)區別:
一、RDD、DataFrame分別是什么?
1、什么是RDD?
RDD(Resilient Distributed Datasets)提(ti)供了一種高度(du)受限(xian)的(de)(de)(de)共享內存模型。即RDD是只(zhi)讀的(de)(de)(de)記錄分(fen)區的(de)(de)(de)集合,只(zhi)能通過在(zai)其他(ta)RDD執行確定(ding)的(de)(de)(de)轉換(huan)操作(如map、join和group by)而創建,然而這(zhe)些(xie)限(xian)制使得實現容錯的(de)(de)(de)開銷很(hen)低(di)。RDD仍然足(zu)以表示很(hen)多類型的(de)(de)(de)計(ji)算(suan),包括MapReduce和專用的(de)(de)(de)迭代編程模型(如Pregel)等。
2、什么是DataFrame?
DataFrame是一種分布式(shi)(shi)的(de)數據(ju)集,并且以列的(de)方式(shi)(shi)組合的(de)。類似(si)于關(guan)系型數據(ju)庫(ku)中的(de)表(biao)。可以說(shuo)是一個具(ju)有良好優化技術的(de)關(guan)系表(biao)。DataFrame背后的(de)思想是允許處理(li)大(da)量結構化數據(ju)。提供了一些抽象(xiang)的(de)操作,如select、filter、aggregation、plot。DataFrame包含帶schema的(de)行。schema是數據(ju)結構的(de)說(shuo)明。相(xiang)當于具(ju)有schema的(de)RDD。
二、RDD、DataFrame有什(shen)么特性?
在Apache Spark 里面DF 優于RDD,但也包含(han)了RDD的特性(xing)。RDD和(he)DataFrame的共同特征是不可性(xing)、內存運行(xing)、彈性(xing)、分布式計算(suan)能力。
它允許用(yong)戶將結構強加(jia)到分布式數(shu)(shu)據集合上。因此提供了(le)更高層(ceng)次的抽象。我們可(ke)以(yi)從(cong)不同的數(shu)(shu)據源(yuan)構建DataFrame。例如結構化數(shu)(shu)據文件、Hive中(zhong)的表、外(wai)部數(shu)(shu)據庫或現有的RDDs。DataFrame的應用(yong)程(cheng)序(xu)編程(cheng)接(jie)口(kou)(api)可(ke)以(yi)在各種語(yu)言(yan)中(zhong)使用(yong),包括Python、Scala、Java和R。
1、RDD五大特性:
1.(必須的)可分(fen)區的: 每一(yi)個(ge)分(fen)區對應就是一(yi)個(ge)Task線程。
2.(必須(xu)的)計算(suan)函數(對每(mei)個分區進行計算(suan)操作(zuo))。
3.(必須的)存在依(yi)賴關系。
4.(可選(xuan)的)對于key-value數(shu)據(ju)存在分區計算函數(shu)。
5.(可選的)移(yi)動(dong)數(shu)據不如移(yi)動(dong)計算(suan)(將計算(suan)程序運行在(zai)離數(shu)據越近越好(hao))。
2、DataFrame特性:
1.支持從KB到PB級的數(shu)據量(liang)
2.支持多種(zhong)數(shu)據格式和多種(zhong)存儲系(xi)統(tong)
3.通過(guo)Catalyst優化器進(jin)行(xing)先進(jin)的優化生成代(dai)碼
4.通過(guo)Spark無(wu)縫(feng)集成(cheng)主流(liu)大(da)數據(ju)工具與基(ji)礎(chu)設(she)施
5.API支持Python、Java、Scala和(he)R語(yu)言
三、RDD與(yu)DataFrame的區別
RDD是彈性(xing)分布式數據集(ji)(ji),數據集(ji)(ji)的概念比較強一點。容器可以(yi)裝(zhuang)任(ren)意類(lei)型的可序列化(hua)元素(支持泛型)RDD的缺點是無從知道每個元素的【內部字段】信息。意思是下(xia)圖(tu)不(bu)知道Person對象的姓名(ming)、年齡等。
DataFrame也是(shi)(shi)(shi)彈性分布式(shi)數據(ju)集,但是(shi)(shi)(shi)本質(zhi)上是(shi)(shi)(shi)一個(ge)(ge)分布式(shi)數據(ju)表(biao),因此稱為分布式(shi)表(biao)更準確(que)。DataFrame每個(ge)(ge)元素(su)不是(shi)(shi)(shi)泛型(xing)對(dui)象,而是(shi)(shi)(shi)Row對(dui)象。
DataFrame的(de)缺(que)點是Spark SQL DataFrame API 不(bu)支(zhi)持編譯時類型安全,因此,如果結構(gou)未知,則(ze)不(bu)能操作數據(ju);同時,一旦將域對(dui)象轉(zhuan)換(huan)為Data frame ,則(ze)域對(dui)象不(bu)能重構(gou)。
DataFrame=RDD-【泛型】+schema+方便的SQL操(cao)作(zuo)+【catalyst】優化(hua)
DataFrame本質上是一個【分布式數據表】
DataFrame優于(yu)RDD,因為(wei)它(ta)提供了內存管理(li)和優化的執行計劃(hua)。總結(jie)為(wei)以下兩(liang)點:
a.自(zi)定義內(nei)存(cun)管理:當數(shu)據以二(er)進制(zhi)格式存(cun)儲(chu)在堆外(wai)內(nei)存(cun)時,會節(jie)省大量內(nei)存(cun)。除(chu)此之(zhi)外(wai),沒(mei)有垃圾回收(GC)開銷。還避免(mian)了昂貴的Java序列化。因為數(shu)據是(shi)以二(er)進制(zhi)格式存(cun)儲(chu)的,并且內(nei)存(cun)的schema是(shi)已知的。
b.優(you)化執行(xing)計(ji)劃:這也稱為(wei)查詢優(you)化器。可以為(wei)查詢的執行(xing)創建一(yi)個優(you)化的執行(xing)計(ji)劃。優(you)化執行(xing)計(ji)劃完成后(hou)最終將在RDD上運行(xing)執行(xing)。
如(ru)果(guo)您想了解(jie)更多關于千鋒教育或者大數據培訓教程(cheng),可以咨詢我們的客服小姐姐,他們會為您做詳細的解(jie)答。