RDD和DataFrame的區(qū)別

spark3.0版本可能不太公布底層的RDD购对,以后使用dataframe將成為趨勢,現(xiàn)在大都數(shù)公司也多使用dataframe來處理數(shù)據(jù)

RDD篮幢、DataFrame和DataSet是容易產(chǎn)生混淆的概念丈积,必須對其相互之間對比鬼悠,才可以知道其中異同。


RDD和DF的區(qū)別

上圖直觀地體現(xiàn)了DataFrame和RDD的區(qū)別捌木。左側(cè)的RDD[Person]雖然以Person為類型參數(shù)油坝,但Spark框架本身不了解Person類的內(nèi)部結(jié)構(gòu)。而右側(cè)的DataFrame卻提供了詳細(xì)的結(jié)構(gòu)信息刨裆,使得Spark SQL可以清楚地知道該數(shù)據(jù)集中包含哪些列澈圈,每列的名稱和類型各是什么。DataFrame多了數(shù)據(jù)的結(jié)構(gòu)信息帆啃,即schema瞬女。RDD是分布式的Java對象的集合。DataFrame是分布式的Row對象的集合努潘。DataFrame除了提供了比RDD更豐富的算子以外诽偷,更重要的特點(diǎn)是提升執(zhí)行效率、減少數(shù)據(jù)讀取以及執(zhí)行計(jì)劃的優(yōu)化疯坤,比如filter下推报慕、裁剪等。

提升執(zhí)行效率

RDD API是函數(shù)式的贴膘,強(qiáng)調(diào)不變性卖子,在大部分場景下傾向于創(chuàng)建新對象而不是修改老對象。這一特點(diǎn)雖然帶來了干凈整潔的API刑峡,卻也使得Spark應(yīng)用程序在運(yùn)行期傾向于創(chuàng)建大量臨時(shí)對象洋闽,對GC造成壓力。在現(xiàn)有RDD API的基礎(chǔ)之上突梦,我們固然可以利用mapPartitions方法來重載RDD單個(gè)分片內(nèi)的數(shù)據(jù)創(chuàng)建方式诫舅,用復(fù)用可變對象的方式來減小對象分配和GC的開銷,但這犧牲了代碼的可讀性宫患,而且要求開發(fā)者對Spark運(yùn)行時(shí)機(jī)制有一定的了解刊懈,門檻較高。另一方面,Spark SQL在框架內(nèi)部已經(jīng)在各種可能的情況下盡量重用對象虚汛,這樣做雖然在內(nèi)部會打破了不變性匾浪,但在將數(shù)據(jù)返回給用戶時(shí),還會重新轉(zhuǎn)為不可變數(shù)據(jù)卷哩。利用 DataFrame API進(jìn)行開發(fā)蛋辈,可以免費(fèi)地享受到這些優(yōu)化效果。

減少數(shù)據(jù)讀取

分析大數(shù)據(jù)将谊,最快的方法就是 ——忽略它冷溶。這里的“忽略”并不是熟視無睹,而是根據(jù)查詢條件進(jìn)行恰當(dāng)?shù)募糁Α?/p>

上文討論分區(qū)表時(shí)提到的分區(qū)剪 枝便是其中一種——當(dāng)查詢的過濾條件中涉及到分區(qū)列時(shí)尊浓,我們可以根據(jù)查詢條件剪掉肯定不包含目標(biāo)數(shù)據(jù)的分區(qū)目錄逞频,從而減少IO。

對于一些“智能”數(shù)據(jù)格 式栋齿,Spark SQL還可以根據(jù)數(shù)據(jù)文件中附帶的統(tǒng)計(jì)信息來進(jìn)行剪枝苗胀。簡單來說,在這類數(shù)據(jù)格式中褒颈,數(shù)據(jù)是分段保存的柒巫,每段數(shù)據(jù)都帶有最大值、最小值谷丸、null值數(shù)量等 一些基本的統(tǒng)計(jì)信息堡掏。當(dāng)統(tǒng)計(jì)信息表名某一數(shù)據(jù)段肯定不包括符合查詢條件的目標(biāo)數(shù)據(jù)時(shí),該數(shù)據(jù)段就可以直接跳過(例如某整數(shù)列a某段的最大值為100刨疼,而查詢條件要求a > 200)泉唁。

此外,Spark SQL也可以充分利用RCFile揩慕、ORC亭畜、Parquet等列式存儲格式的優(yōu)勢,僅掃描查詢真正涉及的列迎卤,忽略其余列的數(shù)據(jù)拴鸵。

執(zhí)行優(yōu)化

人口數(shù)據(jù)分析示例

為了說明查詢優(yōu)化,我們來看上圖展示的人口數(shù)據(jù)分析的示例蜗搔。圖中構(gòu)造了兩個(gè)DataFrame劲藐,將它們join之后又做了一次filter操作。如果原封不動(dòng)地執(zhí)行這個(gè)執(zhí)行計(jì)劃樟凄,最終的執(zhí)行效率是不高的聘芜。因?yàn)閖oin是一個(gè)代價(jià)較大的操作,也可能會產(chǎn)生一個(gè)較大的數(shù)據(jù)集缝龄。如果我們能將filter下推到 join下方汰现,先對DataFrame進(jìn)行過濾挂谍,再join過濾后的較小的結(jié)果集,便可以有效縮短執(zhí)行時(shí)間瞎饲。而Spark SQL的查詢優(yōu)化器正是這樣做的口叙。簡而言之,邏輯查詢計(jì)劃優(yōu)化就是一個(gè)利用基于關(guān)系代數(shù)的等價(jià)變換嗅战,將高成本的操作替換為低成本操作的過程庐扫。

得到的優(yōu)化執(zhí)行計(jì)劃在轉(zhuǎn)換成物 理執(zhí)行計(jì)劃的過程中,還可以根據(jù)具體的數(shù)據(jù)源的特性將過濾條件下推至數(shù)據(jù)源內(nèi)仗哨。最右側(cè)的物理執(zhí)行計(jì)劃中Filter之所以消失不見,就是因?yàn)槿苋肓擞糜趫?zhí)行最終的讀取操作的表掃描節(jié)點(diǎn)內(nèi)铅辞。

對于普通開發(fā)者而言厌漂,查詢優(yōu)化 器的意義在于,即便是經(jīng)驗(yàn)并不豐富的程序員寫出的次優(yōu)的查詢斟珊,也可以被盡量轉(zhuǎn)換為高效的形式予以執(zhí)行苇倡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市囤踩,隨后出現(xiàn)的幾起案子旨椒,更是在濱河造成了極大的恐慌,老刑警劉巖堵漱,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件综慎,死亡現(xiàn)場離奇詭異,居然都是意外死亡勤庐,警方通過查閱死者的電腦和手機(jī)示惊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愉镰,“玉大人米罚,你說我怎么就攤上這事≌商剑” “怎么了录择?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碗降。 經(jīng)常有香客問我隘竭,道長,這世上最難降的妖魔是什么遗锣? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任货裹,我火速辦了婚禮,結(jié)果婚禮上精偿,老公的妹妹穿的比我還像新娘弧圆。我一直安慰自己赋兵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布搔预。 她就那樣靜靜地躺著霹期,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拯田。 梳的紋絲不亂的頭發(fā)上历造,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音船庇,去河邊找鬼吭产。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鸭轮,可吹牛的內(nèi)容都是我干的臣淤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼窃爷,長吁一口氣:“原來是場噩夢啊……” “哼邑蒋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起按厘,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤医吊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后逮京,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卿堂,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年造虏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了御吞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漓藕,死狀恐怖陶珠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情享钞,我是刑警寧澤揍诽,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站栗竖,受9級特大地震影響暑脆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狐肢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一添吗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧份名,春花似錦碟联、人聲如沸妓美。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壶栋。三九已至,卻和暖如春普监,著一層夾襖步出監(jiān)牢的瞬間贵试,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工凯正, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毙玻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓廊散,卻偏偏與公主長得像淆珊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子奸汇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容