1. 程式人生 > 其它 >第五章_Spark核心程式設計_Rdd_glom運算元

第五章_Spark核心程式設計_Rdd_glom運算元

1. 說明

    /*
    * 1. 定義
    *       def glom(): RDD[Array[T]]
    *
    * 2. 功能
    *     1. 將同一個分割槽的資料直接轉換為相同型別的記憶體陣列,並返回Rdd(元素型別為陣列)
    *     2. 合併分割槽(類似Sql中的collect_list)
    * */
  object glomTest extends App {
    val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("mapPartitionsWithIndexTest")

    val sc: SparkContext 
= new SparkContext(sparkconf) val rdd = sc.makeRDD(Array(1, 2, 3, 4, -1, -2, -3, -4), 2) // 將同一分割槽內的元素 合併一個數組 private val absRdd: RDD[Array[Int]] = rdd.glom() println(s"rdd1 :${absRdd.collect().mkString(",")}") sc.stop() }

2. 需求: 計算所有分割槽最大值求和(分割槽內取最大值,分割槽間最大值求和)

  object glomTestByMax extends
App { val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("mapPartitionsWithIndexTest") val sc: SparkContext = new SparkContext(sparkconf) val rdd = sc.makeRDD(Array(1, 2, 3, 4, -1, -2, -3, -4), 2) // 獲取每個分割槽內的最大值 private val Rdd1: RDD[Int] = rdd.glom().map(_.max)
// 獲取每個分割槽內的最大值 private val Rdd2: RDD[Int] = rdd.mapPartitions( iter => List(iter.max).iterator ) // 拉取所有分割槽,並求和 private val sum: Int = Rdd1.collect().sum private val sum1: Int = Rdd2.collect().sum println(sum) println(sum1) sc.stop() }