Spark基本組件與概念

數(shù)據(jù)結(jié)構(gòu)

RDD

  • 彈性分布式數(shù)據(jù)集。

Resilient Distributed Datasets,意為容錯(cuò)的、并行的數(shù)據(jù)結(jié)構(gòu),可以讓用戶顯式地將數(shù)據(jù)存儲(chǔ)到磁盤和內(nèi)存中,并能控制數(shù)據(jù)的分區(qū)。同時(shí),RDD還提供了一組豐富的操作來操作這些數(shù)據(jù)。

  • RDD的特點(diǎn)
    • 它是在集群節(jié)點(diǎn)上的不可變的、已分區(qū)的集合對(duì)象。
    • 通過并行轉(zhuǎn)換的方式來創(chuàng)建如(map, filter, join, etc)。
    • 失敗自動(dòng)重建。
    • 可以控制存儲(chǔ)級(jí)別(內(nèi)存、磁盤等)來進(jìn)行重用。
    • 必須是可序列化的。
    • 是靜態(tài)類型的。
  • RDD優(yōu)點(diǎn)
    • 編譯時(shí)類型安全
    • 面向?qū)ο蟮木幊田L(fēng)格 ,直接通過類名點(diǎn)的方式來操作數(shù)據(jù)
  • RDD缺點(diǎn)
    • 序列化和反序列化的性能開銷,因?yàn)镽DD只有數(shù)據(jù),沒有數(shù)據(jù)結(jié)構(gòu),無論是集群間的通信, 還是IO操作都需要對(duì)對(duì)象的結(jié)構(gòu)和數(shù)據(jù)進(jìn)行序列化和反序列化.
    • GC的性能開銷,頻繁的創(chuàng)建和銷毀對(duì)象, 勢(shì)必會(huì)增加GC。

RDD曾是spark處理數(shù)據(jù)最核心的基本單元,而spark在1.6推出了新的數(shù)據(jù)處理對(duì)象DataFarme和DataSet。

DataFarme

它在RDD的基礎(chǔ)上增加了數(shù)據(jù)的類型。DataFrame是一種以RDD為基礎(chǔ)的分布式數(shù)據(jù)集,類似于傳統(tǒng)數(shù)據(jù)庫中的二維表格。

  • 它針對(duì)RDD的弱點(diǎn)做了如下優(yōu)化
    • 序列化與反序列化的性能開銷,這個(gè)不用說,因?yàn)橛辛藬?shù)據(jù)結(jié)構(gòu),所以節(jié)省了這一塊。具體上,DataFrame引入了schema : RDD每一行的數(shù)據(jù), 結(jié)構(gòu)都是一樣的. 這個(gè)結(jié)構(gòu)就存儲(chǔ)在schema中. spark通過schame就能夠讀懂?dāng)?shù)據(jù), 因此在通信和IO時(shí)就只需要序列化和反序列化數(shù)據(jù), 而結(jié)構(gòu)的部分就可以省略了.
    • GC的性能開銷,DataFrame引入了off-heap: 意味著JVM堆以外的內(nèi)存, 這些內(nèi)存直接受操作系統(tǒng)管理(而不是JVM)。Spark能夠以二進(jìn)制的形式序列化數(shù)據(jù)(不包括結(jié)構(gòu))到off-heap中, 當(dāng)要操作數(shù)據(jù)時(shí), 就直接操作off-heap內(nèi)存. 由于Spark理解schema, 所以知道該如何操作.

缺點(diǎn):沒有了RDD類型安全和面向?qū)ο蟮膬?yōu)點(diǎn)。

Dataset

結(jié)合了RDD和DataFrame的優(yōu)點(diǎn)。它同時(shí)具備了RDD的類型安全和面向?qū)ο髢?yōu)點(diǎn),同時(shí)也具備了DataFrame的schema和off-heap。同時(shí),它引入了新的概念Encoder。能夠按需訪問,而無需訪問整個(gè)對(duì)象。

總結(jié)

  • RDD類型安全,面向?qū)ο蟆?/li>
  • RDD僅有數(shù)據(jù)沒有數(shù)據(jù)結(jié)構(gòu),序列化開銷大。DataFrame引入schema使其具備了數(shù)據(jù)結(jié)構(gòu)。同時(shí)其生命周期脫離了JVM和頻繁的GC回收。因此其不再是字節(jié)碼,而是二進(jìn)制,又因?yàn)閟chema,所以操作系統(tǒng)和spark能夠快速識(shí)別。但DataFrame失去了RDD類型安全面向?qū)ο蟮膬?yōu)點(diǎn)。
  • DataSet具體RDD和DataFrame的共同優(yōu)點(diǎn)。同時(shí)能夠按字段訪問,無需操作整 個(gè)對(duì)象。
  • 就優(yōu)點(diǎn)和性能來說 RDD<DataFrame<DataSet

組件

image

https://blog.csdn.net/lisi1129/article/details/54755215

Spark算子

Transformation變換/轉(zhuǎn)換算子

這種變換并不觸發(fā)提交作業(yè),完成作業(yè)中間過程處理。

Transformation 操作是延遲計(jì)算的,也就是說從一個(gè)RDD 轉(zhuǎn)換生成另一個(gè) RDD 的轉(zhuǎn)換操作不是馬上執(zhí)行,需要等到有 Action 操作的時(shí)候才會(huì)真正觸發(fā)運(yùn)算。

Action行動(dòng)算子

這類算子會(huì)觸發(fā) SparkContext 提交 Job 作業(yè)。

Action 算子會(huì)觸發(fā) Spark 提交作業(yè)(Job),并將數(shù)據(jù)輸出 Spark系統(tǒng)。

輸入分區(qū)與輸出分區(qū)一對(duì)一型

  • map算子
  • flatMap算子
  • mapPartitions算子
  • glom算子

輸入分區(qū)與輸出分區(qū)多對(duì)一型

  • union算子
  • cartesian算子(笛卡爾積函數(shù))

輸入分區(qū)與輸出分區(qū)多對(duì)多型

  • grouBy算子

輸出分區(qū)為輸入分區(qū)子集型

  • filter算子
  • distinct算子
  • subtract算子(去掉交集,不去重)
  • sample算子
  • takeSample算子
  • intersection算子(取子集并去重)

Cache型

  • cache算子
  • persist算子

cache只有一個(gè)默認(rèn)的緩存級(jí)別MEMORY_ONLY ,而persist可以根據(jù)情況設(shè)置其它的緩存級(jí)別。

常用算子總覽

操作類型 函數(shù)名 作用 輸入與輸出關(guān)系
轉(zhuǎn)化操作 map 參數(shù)是函數(shù),函數(shù)應(yīng)用于RDD每一個(gè)元素,返回值是新的RDD 分區(qū)一對(duì)一
轉(zhuǎn)化操作 flatMap 參數(shù)是函數(shù),函數(shù)應(yīng)用于RDD每一個(gè)元素,將元素?cái)?shù)據(jù)進(jìn)行拆分,變成迭代器,返回值是新的RDD 分區(qū)一對(duì)一
轉(zhuǎn)化操作 filter 參數(shù)是函數(shù),函數(shù)會(huì)過濾掉不符合條件的元素,返回值是新的RDD 分區(qū)一對(duì)一
轉(zhuǎn)化操作 distinct 沒有參數(shù),將RDD里的元素進(jìn)行去重操作 輸出分區(qū)為輸入分區(qū)子集
轉(zhuǎn)化操作 union 參數(shù)是RDD,生成包含兩個(gè)RDD所有元素的新RDD 輸入分區(qū)與輸出分區(qū)多對(duì)一
轉(zhuǎn)化操作 intersection 參數(shù)是RDD,求出兩個(gè)RDD的共同元素 輸出分區(qū)為輸入分區(qū)子集
轉(zhuǎn)化操作 subtract 參數(shù)是RDD,將原RDD里和參數(shù)RDD里相同的元素去掉 輸出分區(qū)為輸入分區(qū)子集
轉(zhuǎn)化操作 cartesian 參數(shù)是RDD,求兩個(gè)RDD的笛卡兒積 輸入分區(qū)與輸出分區(qū)多對(duì)一
行動(dòng)操作 collect 返回RDD所有元素 返回RDD所有元素
行動(dòng)操作 count RDD里元素個(gè)數(shù)
行動(dòng)操作 countByValue 各元素在RDD中出現(xiàn)次數(shù)
行動(dòng)操作 reduce 并行整合所有RDD數(shù)據(jù),例如求和操作
行動(dòng)操作 fold(0)(func) 和reduce功能一樣,不過fold帶有初始值
行動(dòng)操作 aggregate(0)(seqOp,combop) 和reduce功能一樣,但是返回的RDD數(shù)據(jù)類型和原RDD不一樣
行動(dòng)操作 foreach(func) 對(duì)RDD每個(gè)元素都是使用特定函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容