Spark中對(duì)RDD的理解
簡(jiǎn)介
what the is RDD?
RDD(Resilient Distributed Datasets)
(Resilient 彈性),(Distributed 分布式),(Datasets 數(shù)據(jù)集)
RDD是一個(gè)彈性分布式數(shù)據(jù)集,是分布式內(nèi)存的一個(gè)抽象概念,提供了一種高度受限共享內(nèi)存模型。
RDD的特性
1.分片的數(shù)據(jù)集(list of partiton)
假設(shè)要讀取HDFS上的數(shù)據(jù),每個(gè)block塊就是一個(gè)分片(partiton),所有的分片(partiton)組合在一起就是一個(gè)集合(list) 一個(gè)RDD。
2.在分片中使用函數(shù)計(jì)算(function for computing each partiton)
現(xiàn)在假設(shè)我們有map的函數(shù),和一個(gè)RDD,這個(gè)RDD中有3個(gè)partiton,那么這個(gè)map函數(shù)會(huì)在每個(gè)partiton之上的進(jìn)行計(jì)算。
計(jì)算完畢后,又組成一個(gè)新的RDD,以迭代的方式進(jìn)行計(jì)算。

3.數(shù)據(jù)集依賴RDD
從2.在分片中使用函數(shù)計(jì)算可以看出。
首先RDD1初始化的時(shí)候是在HDFS系統(tǒng)中讀出來(lái)的數(shù)據(jù),然后通過(guò)map函數(shù)在partiton進(jìn)行計(jì)算又組成了一個(gè)新的RDD2,這樣我們可以得出結(jié)論RDD都是有依賴關(guān)系的。依賴的好處就是有容錯(cuò),假設(shè)RDD2中的partiton數(shù)據(jù)丟失了,可以重新在RDD1中計(jì)算過(guò)來(lái)。
4.KV的RDD
如果RDD中的元素是二元組類型的話,那么這個(gè)RDD就叫KV格式的RDD
5.task計(jì)算數(shù)據(jù)本地化
task理解為是一個(gè)線程,在任務(wù)調(diào)度的時(shí)候RDD會(huì)提供一個(gè)接口給我們調(diào)用,知道partiton所在的位置之后就分發(fā)task讓其執(zhí)行任務(wù)。
Driver的作用
1.負(fù)責(zé)任務(wù)的分發(fā)(task的分發(fā))
2.將每一個(gè)task的計(jì)算結(jié)果拉回到Driver端。
spark的代碼執(zhí)行流程
1.從文件系統(tǒng)中讀取數(shù)據(jù)(Flie System)加載到RDD。
2.使用transformations算子 對(duì)RDD的計(jì)算(不會(huì)立即執(zhí)行)。
3.觸發(fā)Action類算子執(zhí)行(立即執(zhí)行)。