1. 程式人生 > >RDD運算元介紹

RDD運算元介紹

一、RDD運算元簡介

spark在執行過程中通過運算元對RDD進行計算,運算元是RDD中定義的函式,可以對RDD中資料進行轉換和操作,如下圖


輸入:spark程式中資料從外部資料空間輸入到spark中的資料塊,通過BlockManager進行管理

執行:在spark資料形成RDD後,可以通過變換運算元,如filter等對資料進行操作,並將RDD轉換為新的RDD,通過Action運算元,觸發Spark提交作業。如果資料複用,可以通過cache運算元將資料快取到記憶體中。

輸出:程式執行結束後資料會輸出Spark執行時的空間,存在到分散式存在結構(如:saveAsTextFile輸出到HDFS)或者scala的資料集合中。

Spark將常用的大資料操作都轉化成RDD的子類,Spark操作資料模型圖如下;

二、SparkRDD中的運算元分類。

1.Value資料型別的Transformation運算元,這種變化並不觸發提供作業,針對處理的資料項是Value型的資料。

2.Key-Value型別的Transformation運算元,這種變化並不觸發提供作業,針對處理的資料項是Key-Value型的資料

3.Action運算元,這類運算元會觸發SparkContext提交Job作業。

三、RDD Transformation

Transformations是一種演算法描述,標記著需要進行資料操作的資料,但不真正執行,具有Lazy特性,操作延遲,需要等到Actions操作或者Checkpoint操作時,才能真正觸發操作。

      RDD轉換,從之前的RDD構建一個新的RDD,像map()和filter()

    1.逐元素的Transformation

        map()接收函式,把函式應用到RDD的每一個元素,返回新的RDD

        var lines2=line.map(word=>(word,1))

        filter()接收函式,返回只包含滿足filter()函式的元素的新RDD

        var lines3=line.filter(word=word.contains("hello"))

        flatMap()接收函式,對每一個輸入元素,輸出多個輸出元素,將RDD中元素壓扁後返回一般新的RDD

        val inputs=sc.textFile("/data/shellScript/wordcount")

       val lines=inputs.flatMap(line=line.split(","))

二、RDD集合運算

RDD支援數學集合的計算,例如並集、交集計算。

rdd1.distinct()去重

rdd1.union(rdd2) 並集

rdd1.intersecton(rdd2) 交集

rdd1.substact(rdd2)      rdd1-rdd2

四、Action

在RDD上計算出一個結果,並把結果返回給driver program或者儲存在檔案系統,count(),save

RDD常用Action:

collect():返回RDD的所有元素

count():計數

countByValue():返回一個map表示唯一元素出現的個數

take(num):返回幾個元素,隨機無序

top(num):返回前幾個元素,排序之後的top

takeOrdered(num)(ordering):返回基於提供的排序演算法的前幾個元素

reduce();接收一個函式,作用在RDD兩個相同型別的元素上,返回新元素,可以實現,RDD中元素的累加,計數和其它型別的聚集操作,for example:     rdd.reduce((x,y)=>x+y)

foreach():計算RDD的每一個元素,但不返回到本地