談?wù)凴DD,DataFrame,Dataset的區(qū)別和各自的優(yōu)勢
一、談?wù)凴DD,DataFrame,Dataset的區(qū)別和各自的優(yōu)勢
RDD、DataFrame和DataSet是容易產(chǎn)生混淆的概念,必須對其相互之間對比,才可以知道其中異同。
RDD和DataFrame
RDD-DataFrame
上圖直觀地體現(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)部會(huì)打破了不變性,但在將數(shù)據(jù)返回給用戶時(shí),還會(huì)重新轉(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等列式存儲(chǔ)格式的優(yōu)勢,僅掃描查詢真正涉及的列,忽略其余列的數(shù)據(jù)。
二、杭州哪里有賣修花堂化妝品的?
www.lushier.com
地????址: 浙江省杭州蕭山區(qū)佳境街45號(hào)
三、鋼化玻璃刮花了,能修嗎
是鋼化前刮痕還是鋼化后有刮痕,鋼化前刮花可用拋光機(jī)處理,鋼化后刮痕是沒有辦法的。 手提玻璃拋光機(jī) 主要特點(diǎn): 手提拋光機(jī)主要用于玻璃表面微裂紋和花斑等的處理和加工,能夠?qū)p微受損的表面進(jìn)行人工的打磨拋光處理,使受損的玻璃表面恢復(fù)平滑和光亮,常配合拋光粉一起使用。
四、栽了五年的樹苗初夏剪枝太狠,來年春天會(huì)活嗎?剪后也發(fā)了新芽,但夏天一到全曬枯了
栽了五年的樹苗,
初夏剪枝太狠,
來年春天會(huì)活嗎?
剪后也發(fā)了新芽,
但夏天一到全曬枯了,
可以看看主干有沒有死了,
假如沒有死當(dāng)然是開春會(huì)發(fā)芽的。