首頁技術文章正文

Spark RDD是什么?RDD特征介紹

更新時間:2020-12-22 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif

RDD( Resilient Distributed Dataset,彈性分布式數(shù)據(jù)集),是一個容錯的、并行的數(shù)據(jù)結構,可以讓用戶顯式地將數(shù)據(jù)存儲到磁盤和內存中,并且還能控制數(shù)據(jù)的分區(qū)。對于迭代式計算和交互式數(shù)據(jù)挖掘,RDD可以將中間計算的數(shù)據(jù)結果保存在內存中,若是后面需要中間結果參與計算時,則可以直接從內存中讀取,從而可以極大地提高計算速度。

每個RDD都具有五大特征,具體如下。
1.分區(qū)列表( a list of partitions)

每個RDD被分為多個分區(qū)(Partitions),這些分區(qū)運行在集群中的不同節(jié)點,每個分區(qū)都會被一個計算任務處理,分區(qū)數(shù)決定了并行計算的數(shù)量,創(chuàng)建RDD時可以指定RDD分區(qū)的個數(shù)。如果不指定分區(qū)數(shù)量,當RDD從集合創(chuàng)建時,默認分區(qū)數(shù)量為該程序所分配到的資源的CPU核數(shù)(每個Core可以承載2~4個Partition),如果是從HDFS文件創(chuàng)建,默認為文件的Block數(shù)。

2.每個分區(qū)都有一個計算函數(shù)( a function for computing each split)

Spark的RDD的計算函數(shù)是以分片為基本單位的,每個RDD都會實現(xiàn) compute函數(shù),對具體的分片進行計算。

3.依賴于其他RDD(a list of dependencies on other RDDs)

RDD的每次轉換都會生成一個新的RDD,所以RDD之間就會形成類似于流水線一樣的前后依賴關系。在部分分區(qū)數(shù)據(jù)丟失時,Spark可以通過這個依賴關系重新計算丟失的分區(qū)數(shù)據(jù),而不是對RDD的所有分區(qū)進行重新計算。

4.(Key,Value)數(shù)據(jù)類型的RDD分區(qū)器(a Partitioner for Key-Value RDDS)

當前Spark中實現(xiàn)了兩種類型的分區(qū)函數(shù),一個是基于哈希的HashPartitioner,另外個是基于范圍的RangePartitioner。只有對于(Key,Value)的RDD,才會有Partitioner(分區(qū)),非(Key,Value)的RDD的Partitioner的值是None。Partitioner函數(shù)不但決定了RDD本身的分區(qū)數(shù)量,也決定了parent RDD Shuffle輸出時的分區(qū)數(shù)量。

5.每個分區(qū)都有一個優(yōu)先位置列表(a list of preferred locations to compute each split on)

優(yōu)先位置列表會存儲每個Partition的優(yōu)先位置,對于一個HDFS文件來說,就是每個Partition塊的位置。按照“移動數(shù)據(jù)不如移動計算”的理念,Spark在進行任務調度的時候,會盡可能地將計算任務分配到其所要處理數(shù)據(jù)塊的存儲位置。


猜你喜歡

RDD轉換算子API過程演示

不同系統(tǒng)如何加載數(shù)據(jù)創(chuàng)建RDD?

RDD為什么要進行數(shù)據(jù)持久化?它的操作方法有哪些?

黑馬程序員大數(shù)據(jù)培訓課程



分享到:
在線咨詢 我要報名
和我們在線交談!