1. 程式人生 > >零基礎入門大資料探勘之spark的rdd

零基礎入門大資料探勘之spark的rdd

本節簡單介紹一下spark下的基本資料結構RDD,方便理解後續的更多操作。

那麼第一個問題,什麼是rdd。我們知道,大資料一般儲存在分散式叢集裡面,那麼你在對其進行處理的時候總得把它讀出來吧,讀出來後總得把它存成某種格式的檔案吧,就好比程式語言裡面的,這個資料是陣列,那麼你可以以陣列的格式操作它,直接索引下標訪問之類的,如果這個資料鏈表,那麼你可以用另外的形式訪問它。那麼很自然的,你用語言讀取資料後,它總得是某種格式的資料吧,那麼在大資料的不同框架裡面,形成的資料格式不一樣,在spark裡面,有好幾種儲存格式,其中使用最為廣泛的是rdd格式,也就是資料讀取以後以rdd格式的資料儲存在記憶體裡面。

rdd的全稱:Resilient Distributed Dataset,字面翻譯為彈性分散式資料集。

  • 什麼是彈性?所謂彈性,就是比較靈活的意思,怎麼個靈活法呢,比如讀進來的資料可根據大小或者人為設定選擇性的儲存在記憶體裡面或者磁盤裡面,從而影響後續處理速度。比如一個數據如果出現問題,會進行特定次數的嘗試處理看是否還可以處理。比如rdd裡面可以儲存任意型別的資料,int,double,string或者是混合的等等。比如資料讀進來是儲存幾份,怎麼分割槽,都可以根據大小等自動設定。這就是靈活,相當於裡面進行了很多優化,讓讀進來的大資料集適用於較多的特殊情況。
  • 什麼是分散式呢?這個很好理解,就是分散式儲存在不同機器上。程式碼裡面你可能看到就一行程式碼表示某個資料,但是這個資料實際上是存在多臺機器上的。
  • 資料集,每一個rdd都是一系列相似的資料組成的集合。

理解了rdd是什麼再來看看它能幹什麼。

我們說rdd就是spark框架裡面的一種基本資料結構,就好比任何程式語言裡面具有陣列array這種資料結構一樣。有了資料結構,那麼就會有針對這種資料結構相對應的操作方法。比如python程式設計環境,假設a是一個,字串型別資料,那麼a可能就有很多操作方法,比如a.length,a.split等等。同理,rdd也有很多類似的操作方法。這樣不同的資料之間,如果它們都是rdd的話,那麼操作它們就方便統一了,這是rdd最大的作用。

知道了rdd是spark框架的基本資料結構,再來看看這種資料結構都有哪些方法可以用。

一個rdd主要就是兩種型別的方法可用,一種是轉換型別的運算元:Transformation,一種是行為型別的運算元:Action。什麼意思,慢慢介紹。

所謂轉換型別的運算元,直觀的理解就是處理類的運算元。比如前兩節我們介紹並使用過的map方法,這些都是處理類的運算元,使用這種運算元,就是對rdd中的每個元素進行一定的轉換處理操作,也是用的最多的。所謂行為類的運算元,就是類似聚合,收集資料,儲存資料,顯示資料等等,比如上節的reduce方法,把所有的結果彙總起來。有一點可以比較明顯的區分是:rdd經過轉換運算元後依然是rdd,而經過行為運算元後,多數都不再是rdd了。

最後先列舉一下常見的轉換運算元與行為運算元:

Transformation運算元

map()
filter()
flatMap()
sample()
union()
groupByKey()
reduceByKey()
join()
groupWith()
cartesian()
...

Action運算元

reduce()
collect()
take()
fist()
saveAsTextFile()
saveAsSequenceFile()
...

後續會在慢慢介紹。

帶圖講解全面的spark運算元: Spark常用運算元講解