1. 程式人生 > 實用技巧 >spark學習進度06(RDD的Map運算元、FlatMap運算元、ReduceByKey運算元)

spark學習進度06(RDD的Map運算元、FlatMap運算元、ReduceByKey運算元)

一、Map運算元:

作用

把 RDD 中的資料 一對一 的轉為另一種形式

呼叫

def map[U: ClassTag](f: T ⇒ U): RDD[U]

引數

f→ Map 運算元是原RDD → 新RDD的過程, 這個函式的引數是原 RDD 資料, 返回值是經過函式轉換的新 RDD 的資料

注意點

Map 是一對一, 如果函式是String → Array[String]則新的 RDD 中每條資料就是一個數組

@Test
  def mapTest():Unit={
    //先建立一個RDD
    val rdd1 = sc.parallelize(Seq(1,2,3))
    
//執行map val rdd2 = rdd1.map(item => item*10) //得到結果 val result = rdd2.collect() //結果輸出 result.foreach(item => println(item)) }

二、FlatMap運算元:

作用

FlatMap 運算元和 Map 運算元類似, 但是 FlatMap 是一對多

呼叫

def flatMap[U: ClassTag](f: T ⇒ List[U]): RDD[U]

引數

f→ 引數是原 RDD 資料, 返回值是經過函式轉換的新 RDD 的資料, 需要注意的是返回值是一個集合, 集合中的資料會被展平後再放入新的 RDD

注意點

flatMap 其實是兩個操作, 是map + flatten, 也就是先轉換, 後把轉換而來的 List 展開

  //flatmap運算元
  @Test
  def flatMapTest():Unit={
    //建立RDD
    val rdd1 = sc.parallelize(Seq("Hello lilty","hello wen","lilty Hello"))
    //處理資料
    val rdd2 = rdd1.flatMap(item => item.split(" "))
    //得到結果
    val result=rdd2.collect()
    
//列印 result.foreach(item => println(item)) //關閉sc sc.stop() }

flatMap也是轉換,他可以把陣列和集合展開,並且flatMap中的函式一般也是集合或者陣列

三、ReduceByKey運算元:

作用

首先按照 Key 分組, 接下來把整組的 Value 計算出一個聚合值, 這個操作非常類似於 MapReduce 中的 Reduce

呼叫

def reduceByKey(func: (V, V) ⇒ V): RDD[(K, V)]

引數

func → 執行資料處理的函式, 傳入兩個引數, 一個是當前值, 一個是區域性彙總, 這個函式需要有一個輸出, 輸出就是這個 Key 的彙總結果

注意點

  • ReduceByKey 只能作用於 Key-Value 型資料, Key-Value 型資料在當前語境中特指 Tuple2

  • ReduceByKey 是一個需要 Shuffled 的操作

  • 和其它的 Shuffled 相比, ReduceByKey是高效的, 因為類似 MapReduce 的, 在 Map 端有一個 Cominer, 這樣 I/O 的資料便會減少

     //reduceByKey運算元
      @Test
      def reduceByKeyTest():Unit={
        //建立RDD
        val rdd1 = sc.parallelize(Seq("Hello lilty","hello wen","lilty Hello"))
        //處理資料
        val rdd2 = rdd1.flatMap(item => item.split(" ")).map(item => (item,1)).reduceByKey((curr,agg)=>curr+agg)
        //得到結果
        val result=rdd2.collect()
        //列印
        result.foreach(item => println(item))
        //關閉sc
        sc.stop()
      }

    reduceByKey第一步是按照Key進行分組,然後對每一組進行聚合得到結果