Spark Scala當(dāng)中reduce的用法和例子

馬克-to-win @ 馬克java社區(qū):reduce將RDD中元素前兩個傳給輸入函數(shù),產(chǎn)生一個新的return值,將新產(chǎn)生的return值與RDD中下一個元素(即第三個元素)組成兩個元素,再被傳給輸入函數(shù),這樣遞歸運作,直到最后只有一個值為止。馬克- to-win:馬克 java社區(qū):防盜版實名手機尾號: 73203。*/
    val rdd07 = sc.parallelize(1 to 10)
    val sum = rdd07.reduce((x, y) => x + y)
    println("sum is " + sum)
    /*reduceByKey(function)
reduceByKey就是對元素為KV對的RDD中Key相同的元素的Value進(jìn)行function的reduce操作(如前所述),因此,Key相同的多個元素的值被reduce為一個值,然后與原RDD中的Key組成一個新的KV對。
馬克-to-win @ 馬克java社區(qū):reduceByKey(_+_)是reduceByKey((x,y) => x+y)的一個 簡潔的形式
*/

    val rdd08 = sc.parallelize(List((1, 1),  (1, 4),(1, 3), (3, 7), (3, 5)))
    val rdd08_1 = rdd08.reduceByKey((x, y) => x + y)
    println("reduceByKey 用法 " + rdd08_1.collect().mkString(","))

    sc.stop()
  }




  def myunion(rdd05: RDD[Int], rdd06: RDD[Int]): Unit = {
    val res: RDD[Int] = rdd05.union(rdd06)
    /*馬克-to-win @ 馬克java社區(qū):collect: 收集一個彈性分布式數(shù)據(jù)集的所有元素到一個數(shù)組中,這樣便于我們觀察,畢竟分布式數(shù)據(jù)集比較抽象。Spark的collect方法,是Action類型的一個算子,會從遠(yuǎn)程集群拉取數(shù)據(jù)到driver端。最后,將大量數(shù)據(jù)
 匯集到一個driver節(jié)點上,將數(shù)據(jù)用數(shù)組存放,占用了jvm堆內(nèi)存,非常用意造成內(nèi)存溢出,只用作小型數(shù)據(jù)的觀察。*/
    val arr = res.collect();
    println("arr(0) is " + arr(0) + " arr(2) is " + arr(2) + " arr(4) is " + arr(4));
  }
}


輸出結(jié)果:

map 用法  is 1,16,9,49,25
filter 用法 1,4,3
map2 用法  is 馬克-to-win @ 馬克java社區(qū):2,5,4,8,6
filter2 用法 馬克-to-win @ 馬克java社區(qū):4,7,5
arr(0) is 1 arr(2) is 3 arr(4) is 5
sum is 55
reduceByKey 用法 (1,8),(3,12)