第五章_Spark核心程式設計_Rdd_glom運算元
阿新 • • 發佈:2022-03-23
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 extendsApp { 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() }