ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spark算子 - groupByKey

2021-06-14 14:01:24  阅读:193  来源: 互联网

标签:CompactBuffer String val 算子 groupByKey 分组 Tom Spark



释义

根据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,而后者有



标签:CompactBuffer,String,val,算子,groupByKey,分组,Tom,Spark
来源: https://www.cnblogs.com/convict/p/14882369.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有