释义

  1. aggregateByKey逻辑类似 aggregate,但 aggregateByKey针对的是PairRDD,即键值对 RDD,所以返回结果也是 PairRDD,结果形式为:(各个Key, 同样Key对应的Value聚合后的值)
  2. aggregateByKey先将每个partition内元素进行分组计算,然后将每个partition的计算结果进行combine,得到最终聚合结果。且最终结果允许跟原始RDD类型不同

方法签名如下:

def aggregateByKey[U: ClassTag](zeroValue: U)(seqOp: (U, V) => U, combOp: (U, U) => U): RDD[(K, U)] = self.withScope {
...
}
  • zeroValue: 每个partition的聚合初始值
  • seqOp: sequence operation,对partition内数据进行映射,最终1个partition只有1个结果。输入类型为U跟V,输出为U,即每次操作结果要跟zeroValue类型一致
    • 第一次操作时,U为zeroValue(初始值),第一次操作之后输出结果U,作为下一次操作的U
    • 第二次操作及之后操作时,U为前一次操作输出结果,而不再是zeroValue
  • combOp: combine operation,对每个partition的结果进行combine操作。输入类型为U跟U,输出为U,即输入类型与输出类型一致,最终结果为:(K, U)类型的PairRDD

案例

统计单词个数 WordCount

object TestAggregateByKey {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setAppName("TestAggregateByKey").setMaster("local[1]")
val sc = new SparkContext(conf)
val data = Array("hello world", "simple app is good", "good world")
val result: Array[(String, Int)] = sc.parallelize(data, 1)
.flatMap(_.split(" "))
.map((_, 1))
.aggregateByKey(0)(
(cnt1: Int, cnt2: Int) => cnt1 + cnt2,
(partitionAllCnt1: Int, partitionAllCnt2: Int) => partitionAllCnt1 + partitionAllCnt2
)
.collect()
result.foreach(println)
}
}

输出

(is,1)
(app,1)
(simple,1)
(hello,1)
(good,2)
(world,2)

解释

  1. 先将每个词map成 (词语, 1)的形式
  2. 调用aggregateByKey之后,每个partition内已经按key进行分组了,之后传入初始值0作为每个组的个数,接着进行 cnt1 + cnt2,就是同个key内进行1+1操作,比如单词good 有两个value都是1,此时单词good的组内,计算的值即为2
  3. 所有partition的结果进行计算

Spark算子 - aggregateByKey的更多相关文章

  1. 对spark算子aggregateByKey的理解

    案例 aggregateByKey算子其实相当于是针对不同“key”数据做一个map+reduce规约的操作. 举一个简单的在生产环境中的一段代码 有一些整理好的日志字段,经过处理得到了RDD类型为( ...

  2. spark-聚合算子aggregatebykey

    spark-聚合算子aggregatebykey Aggregate the values of each key, using given combine functions and a neutr ...

  3. Spark:常用transformation及action,spark算子详解

    常用transformation及action介绍,spark算子详解 一.常用transformation介绍 1.1 transformation操作实例 二.常用action介绍 2.1 act ...

  4. (转)Spark 算子系列文章

    http://lxw1234.com/archives/2015/07/363.htm Spark算子:RDD基本转换操作(1)–map.flagMap.distinct Spark算子:RDD创建操 ...

  5. Spark算子总结及案例

    spark算子大致上可分三大类算子: 1.Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Value型的数据. 2.Key-Value数据类型的Tran ...

  6. UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现

      UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现   测试数据 java代码 package com.hzf.spark.study; import ...

  7. UserView--第一种方式set去重,基于Spark算子的java代码实现

    UserView--第一种方式set去重,基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import java.util.Ha ...

  8. spark算子之DataFrame和DataSet

    前言 传统的RDD相对于mapreduce和storm提供了丰富强大的算子.在spark慢慢步入DataFrame到DataSet的今天,在算子的类型基本不变的情况下,这两个数据集提供了更为强大的的功 ...

  9. Spark算子总结(带案例)

    Spark算子总结(带案例) spark算子大致上可分三大类算子: 1.Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Value型的数据. 2.Key ...

随机推荐

  1. vue - public 引入 <script>报错 Uncaught SyntaxError: Unexpected token '<'

    1.现象 原本我是直接在母版引入 <script type="application/javascript" src="static/config.js" ...

  2. PPT变为gif效果

    原文链接:https://www.toutiao.com/i6496812863263343117/ 首先我们点击"文件按钮" 在下拉列表中选择"另存为" 在& ...

  3. 使用 Jenkins + Ansible 实现 Spring Boot 自动化部署101

    本文要点:设计一条 Spring Boot 最基本的流水线:包括构建.制品上传.部署.使用 Docker 容器运行构建逻辑.自动化整个实验环境:包括 Jenkins 的配置,Jenkins agent ...

  4. Flowable实战(四)BPMN2.0 启动与结束事件

    一.BPMN2.0   BPMN2.0规范是一个标准,开源框架和不同供应商都遵循这份标准,使得最终用户不会因为依赖专有解决方案,而被供应商"绑架".有了BPMN2.0标准,不同解决 ...

  5. 解析HetuEngine实现On Yarn原理

    摘要:本文介绍HetuEngine实现On Yarn的原理,通过阅读本文,读者可以了解HetuEngine如何在资源使用方面融入Hadoop生态体系. 本文分享自华为云社区<MRS HetuEn ...

  6. boot项目启动成功 接口全部404

    今天开发的时候遇到一个404的错误,路径启动类位置都对,就是404很气人.记录下解决的过程,以供遇到同等困惑的小伙伴参考 404原因排查步骤 首先按照下面步骤检查一遍 首先检查路径是否正确,把路径重新 ...

  7. Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  8. 【Java】反射

    文章目录 反射 概述 动态语言与非动态语言 动态语言 非动态语言 Java反射机制提供的功能 反射相关的主要API 关于java.lang.Class类的理解 类的加载过程 获取Class的实例的方式 ...

  9. 《剑指offer》面试题12. 矩阵中的路径

    问题描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么该 ...

  10. 《剑指offer》面试题28. 对称的二叉树

    问题描述 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的.     1    / \   2   ...