释义

将每个partition内元素进行聚合,然后将每个partition的聚合结果进行combine,得到最终聚合结果。最终结果允许跟原始RDD类型不同

方法签名如下:

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

案例

统计所有单词总长度,单词的总个数

object TestAggregate {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setAppName("TestAggregate").setMaster("local[1]")
val sc = new SparkContext(conf)
val data = Array("hello", "world", "simple", "app", "is", "good", "good", "world")
val result: (Int, Int) = sc.parallelize(data, 2) // 当前设置为2个partition
.aggregate((0, 0))( //①
(v: (Int, Int), str: String) => (v._1 + str.length, v._2 + 1), // ②
(v1: (Int, Int), v2: (Int, Int)) => (v1._1 + v2._1, v1._2 + v2._2) // ③
)
println(result)
}
}

输出

(34,8)

解释

  1. 在每个partition内传入初始值(0, 0),如①处
  2. 之后每个partition内开始进行聚合计算,如②处。每个partition内的单词长度累加,放入结果二元组的第一位;每处理一个单词,结果二元组的第二位加一,即单词个数加一
  3. 每个partition的结果二元组再进行汇总操作,如③处。最终形成一个二元组,第一位是所有字母的总长度,第二位是所有单词的总个数

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

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

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

  2. Spark算子总结及案例

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

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

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

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

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

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

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

  6. spark算子之DataFrame和DataSet

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

  7. Spark算子---实战应用

    Spark算子实战应用 数据集 :http://grouplens.org/datasets/movielens/ MovieLens 1M Datase 相关数据文件 : users.dat --- ...

  8. spark算子集锦

    Spark 是大数据领域的一大利器,花时间总结了一下 Spark 常用算子,正所谓温故而知新. Spark 算子按照功能分,可以分成两大类:transform 和 action.Transform 不 ...

  9. Spark算子使用

    一.spark的算子分类 转换算子和行动算子 转换算子:在使用的时候,spark是不会真正执行,直到需要行动算子之后才会执行.在spark中每一个算子在计算之后就会产生一个新的RDD. 二.在编写sp ...

随机推荐

  1. [学习笔记] Oracle创建用户、分配权限、设置角色

    创建用户 create user student --用户名 identified by "123456" --密码 default tablespace USERS --表空间名 ...

  2. 我踩过的python的坑

    1. string中Template用法 变量名不能是${tradeDate+1}, python无法识别其为变量,应改为 ${tradeDate1} 变量替换的语句:data_new = Templ ...

  3. POJ 1664 放苹果 (递推思想)

    原题链接:http://poj.org/problem?id=1664 思路:苹果m个,盘子n个.假设 f ( m , n ) 代表 m 个苹果,n个盘子有 f ( m , n ) 种放法. 根据 n ...

  4. 移动端H5选择本地图片

    移动端H5选择本地图片 html://input<input type="file" accept="image/*" capture="cam ...

  5. 《剑指offer》面试题14- II. 剪绳子 II

    问题描述 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] .请问 k[0]*k[1]* ...

  6. 513. Find Bottom Left Tree Value

    Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...

  7. Qt之消息对话框

    widget.h: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QLineEdit> class ...

  8. elasticsearch算法之词项相似度算法(二)

    六.莱文斯坦编辑距离 前边的几种距离计算方法都是针对相同长度的词项,莱文斯坦编辑距离可以计算两个长度不同的单词之间的距离:莱文斯坦编辑距离是通过添加.删除.或者将一个字符替换为另外一个字符所需的最小编 ...

  9. DBeaver下载安装与连接MySQL数据库

    一.Dbeaver下载 官网下载地址:Download | DBeaver Community 点击"Windows 64 bit (installer)"即可进行下载. 二.Db ...

  10. linux中sort命令全面解析

    目录 一:sort命令作用 二:sort格式 1.sort参数 2.参数解析 sort命令简介 Linux sort 命令用于将文本文件内容加以排序. sort 可针对文本文件的内容,以行为单位来排序 ...