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 继承自序列,因此它很容易的进行遍历和迭代,可以把它理解成一个列表
  1. groupByKeygroupBy 的最大区别就是前者计算后CompactBuffer 的元素没有原始的key,而后者有



相关文章

1.SparkStreaming是什么?SparkStreaming是SparkCore的扩展A...
本篇内容介绍了“Spark通讯录相似度计算怎么实现”的有关知识...
本篇文章给大家分享的是有关如何进行Spark数据分析,小编觉得...
本篇内容主要讲解“Spark Shuffle和Hadoop Shuffle有哪些区别...
这篇文章主要介绍“TSDB的数据怎么利用Hadoop/spark集群做数...
本篇内容介绍了“Hadoop与Spark性能原理是什么”的有关知识,...