Spark算子 - groupByKey


釋義

根據RDD中的某個屬性進行分組,分組後形式爲(k, [v1, v2, ...])
方法簽名如下:

def groupByKey(): RDD[(K, Iterable[V])] = self.withScope {
    ...
}

案例

查看每個科目有哪些學生選擇

object TestGroupByKey {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setAppName("TestReduceByKey").setMaster("local[1]")
    val sc: SparkContext = new SparkContext(conf)
    val data = Array(("Science", "Jack"), ("Science", "Tom"), ("Music", "Nancy"), ("Sport", "Tom"), ("Music", "Tony"))
    val result: Array[(String, Iterable[String])] = sc.parallelize(data)
      .groupByKey()
      .collect()
    result.foreach(println)
  }
}

輸出

(Music,CompactBuffer(Nancy, Tony))
(Science,CompactBuffer(Jack, Tom))
(Sport,CompactBuffer(Tom))

解釋

  1. 根據key分組,即根據科目分組,分組後爲K-V型RDD,key爲科目,value爲元素是學生名字的CompactBuffer
    • 這是Spark定義的結構(源碼),類似於Scala原生的ArrayBuffer,但比後者性能更好
    • CompactBuffer 繼承自序列,因此它很容易的進行遍歷和迭代,可以把它理解成一個列表
  2. groupByKeygroupBy 的最大區別就是前者計算後CompactBuffer 的元素沒有原始的key,而後者有



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章