溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

RDD的類(lèi)型有哪些

發(fā)布時(shí)間:2021-12-22 15:33:48 來(lái)源:億速云 閱讀:409 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“RDD的類(lèi)型有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“RDD的類(lèi)型有哪些”吧!

一、RDD定義

  RDD(Resilient Distributed Dataset)叫做分布式數(shù)據(jù)集,是Spark中最基本的數(shù)據(jù)抽象,它代表一個(gè)不可變(數(shù)據(jù)和元數(shù)據(jù))、可分區(qū)、里面的元素可并行計(jì)算的集合。其特點(diǎn)在于自動(dòng)容錯(cuò),位置感知性調(diào)度和可伸縮性。

二、RDD的屬性

  1.一組分片。即數(shù)據(jù)集的基本組成單位。對(duì)于RDD來(lái)說(shuō),每個(gè)分片都會(huì)被一個(gè)計(jì)算任務(wù)處理,并決定并行計(jì)算的粒度。用戶(hù)可以在創(chuàng)建RDD時(shí)指定RDD的分片個(gè)數(shù),如果沒(méi)有指定,那么就會(huì)采用默認(rèn)值。默認(rèn)值就是程序所分配到的CPU Core的數(shù)目。

  2.一個(gè)計(jì)算每個(gè)分區(qū)的函數(shù)。Spark中RDD的計(jì)算是以分片為單位的,每個(gè)RDD都會(huì)實(shí)現(xiàn)compute函數(shù)以達(dá)到這個(gè)目的。compute函數(shù)會(huì)對(duì)迭代器進(jìn)行復(fù)合,不需要保存每次計(jì)算的結(jié)果。

  3.RDD之間的依賴(lài)關(guān)系。RDD的每次轉(zhuǎn)換都會(huì)生成一個(gè)新的RDD,所以RDD之間就會(huì)形成類(lèi)似于流水線(xiàn)一樣的前后依賴(lài)關(guān)系。這里要提及一個(gè)概念——容錯(cuò)處理:,即在部分分區(qū)數(shù)據(jù)丟失時(shí),Spark可以通過(guò)這個(gè)依賴(lài)關(guān)系重新計(jì)算丟失的分區(qū)數(shù)據(jù),而不是對(duì)RDD的所有分區(qū)進(jìn)行重新計(jì)算。

  4.一個(gè)Partitioner,分區(qū)器。即RDD的分片函數(shù)。當(dāng)前Spark中實(shí)現(xiàn)了兩種類(lèi)型的分片函數(shù),一個(gè)是基于哈希的HashPartitioner,另外一個(gè)是基于范圍的RangePartitioner。只有對(duì)于key-value的RDD,才會(huì)有Partitioner,非key-value的RDD的Parititioner的值是None。Partitioner函數(shù)不但決定了RDD本身的分片數(shù)量,也決定了parent RDD Shuffle輸出時(shí)的分片數(shù)量。

  5.一個(gè)列表。存儲(chǔ)存取每個(gè)Partition的優(yōu)先位置(preferred location)。

  對(duì)于一個(gè)HDFS文件來(lái)說(shuō),這個(gè)列表保存的就是每個(gè)Partition所在的塊的位置。按照“移動(dòng)數(shù)據(jù)不如移動(dòng)計(jì)算”的理念,Spark在進(jìn)行任務(wù)調(diào)度的時(shí)候,會(huì)盡可能地將計(jì)算任務(wù)分配到其所要處理數(shù)據(jù)塊的存儲(chǔ)位置。

三、RDD類(lèi)型

1.Transformation -> 記錄計(jì)算過(guò)程(記錄參數(shù),計(jì)算方法)

轉(zhuǎn)換

含義

map(func)

返回一個(gè)新的RDD,該RDD由每一個(gè)輸入元素經(jīng)過(guò)func函數(shù)轉(zhuǎn)換后組成

filter(func)

返回一個(gè)新的RDD,該RDD由經(jīng)過(guò)func函數(shù)計(jì)算后返回值為true的輸入元素組成

flatMap(func)

類(lèi)似于map,但是每一個(gè)輸入元素可以被映射為0或多個(gè)輸出元素(所以func應(yīng)該返回一個(gè)序列,而不是單一元素)

mapPartitions(func)

類(lèi)似于map,但獨(dú)立地在RDD的每一個(gè)分片上運(yùn)行,因此在類(lèi)型為T(mén)的RDD上運(yùn)行時(shí),func的函數(shù)類(lèi)型必須是Iterator[T] => Iterator[U]

mapPartitionsWithIndex(func)

類(lèi)似于mapPartitions,但func帶有一個(gè)整數(shù)參數(shù)表示分片的索引值,因此在類(lèi)型為T(mén)的RDD上運(yùn)行時(shí),func的函數(shù)類(lèi)型必須是

(Int, Iterator[T]) => Iterator[U]

sample(withReplacement, fraction, seed)

根據(jù)fraction指定的比例對(duì)數(shù)據(jù)進(jìn)行采樣,可以選擇是否使用隨機(jī)數(shù)進(jìn)行替換,seed用于指定隨機(jī)數(shù)生成器種子

union(otherDataset)

對(duì)源RDD和參數(shù)RDD求并集后返回一個(gè)新的RDD

intersection(otherDataset)

diff -> 差集

對(duì)源RDD和參數(shù)RDD求交集后返回一個(gè)新的RDD

distinct([numTasks]))

         [改變分區(qū)數(shù)]

對(duì)源RDD進(jìn)行去重后返回一個(gè)新的RDD

groupByKey([numTasks])

在一個(gè)(K,V)的RDD上調(diào)用,返回一個(gè)(K, Iterator[V])的RDD

reduceByKey(func, [numTasks])

在一個(gè)(K,V)的RDD上調(diào)用,返回一個(gè)(K,V)的RDD,使用指定的reduce函數(shù),將相同key的值聚合到一起,與groupByKey類(lèi)似,reduce任務(wù)的個(gè)數(shù)可以通過(guò)第二個(gè)可選的參數(shù)來(lái)設(shè)置

aggregateByKey(zeroValue)(seqOp, combOp, [numTasks])


sortByKey([ascending], [numTasks])

在一個(gè)(K,V)的RDD上調(diào)用,K必須實(shí)現(xiàn)Ordered接口,返回一個(gè)按照key進(jìn)行排序的(K,V)的RDD

sortBy(func,[ascending], [numTasks])

與sortByKey類(lèi)似,但是更靈活

join(otherDataset, [numTasks])

在類(lèi)型為(K,V)和(K,W)的RDD上調(diào)用,返回一個(gè)相同key對(duì)應(yīng)的所有元素對(duì)在一起的(K,(V,W))的RDD

cogroup(otherDataset, [numTasks])

在類(lèi)型為(K,V)和(K,W)的RDD上調(diào)用,返回一個(gè)(K,(Iterable<V>,Iterable<W>))類(lèi)型的RDD

cartesian(otherDataset)

笛卡爾積

pipe(command, [envVars])


coalesce(numPartitions)


repartition(numPartitions)

 重新分區(qū)

repartitionAndSortWithinPartitions(partitioner)


2.Action  -> 觸發(fā)生成job(一個(gè)job對(duì)應(yīng)一個(gè)action算子)

動(dòng)作

含義

reduce(func)

通過(guò)func函數(shù)聚集RDD中的所有元素,這個(gè)功能必須是可交換且可并聯(lián)的

collect()

在驅(qū)動(dòng)程序中,以數(shù)組的形式返回?cái)?shù)據(jù)集的所有元素

count()

返回RDD的元素個(gè)數(shù)

first()

返回RDD的第一個(gè)元素(類(lèi)似于take(1))

take(n)

取數(shù)據(jù)集的前n個(gè)元素組成的數(shù)組

takeSample(withReplacement,num, [seed])

返回一個(gè)數(shù)組,該數(shù)組由從數(shù)據(jù)集中隨機(jī)采樣的num個(gè)元素組成,可以選擇是否用隨機(jī)數(shù)替換不足的部分,seed用于指定隨機(jī)數(shù)生成器種子

takeOrdered(n[ordering])

takeOrdered和top類(lèi)似,只不過(guò)以和top相反的順序返回元素

saveAsTextFile(path)

將數(shù)據(jù)集的元素以textfile的形式保存到HDFS文件系統(tǒng)或者其他支持的文件系統(tǒng),對(duì)于每個(gè)元素,Spark將會(huì)調(diào)用toString方法,將它裝換為文件中的文本

saveAsSequenceFile(path

將數(shù)據(jù)集中的元素以Hadoop sequencefile的格式保存到指定的目錄下,可以使HDFS或者其他Hadoop支持的文件系統(tǒng)。

saveAsObjectFile(path


countByKey()

針對(duì)(K,V)類(lèi)型的RDD,返回一個(gè)(K,Int)的map,表示每一個(gè)key對(duì)應(yīng)的元素個(gè)數(shù)。

foreach(func)

在數(shù)據(jù)集的每一個(gè)元素上,運(yùn)行函數(shù)func進(jìn)行更新。

感謝各位的閱讀,以上就是“RDD的類(lèi)型有哪些”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)RDD的類(lèi)型有哪些這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)
推薦閱讀:
  1. Spark Core 的RDD
  2. RDD編程

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

rdd
AI