aggregate

aggregate 是比较常用的 行动 操作,不是很好懂,这里做个解释。

aggregate(zeroValue, seqOp, combOp)

zeroValue 是一个初始值,自己根据实际情况进行设定;

首先我们知道 RDD 是被分区,然后并行操作的;

seqOp 是对每个分区进行聚合,每个分区聚合结果作为 combOp 的输入;

combOp 对分区聚合结果再次进行聚合;

seqOp 和 combOp 必须有且仅有2个参数

示例如下

seqOp:

把初始值设为 0,累加就是求和

把初始值设为 0,每次加1就是计数;然后 迭代 初始值

combOp:

每个分区的聚合结果为两部分(sum,count)

在初始值的基础上,把每个分区的 sum 相加,count 相加

迭代初始值

seqOp = (lambda x, y: (x[0] + y, x[1] + 1))     ## x 为 初始值,y 是 list 中的单个元素
combOp = (lambda x, y: (x[0] + y[0], x[1] + y[1])) ## x 为 初始值,y 是 seqOp 单个分区的聚合结果
sc.parallelize([1, 2, 3, 4]).aggregate((0, 0), seqOp, combOp) # (10, 4) ## 初始值变成 (3, 0), 分一个区,seqOp 聚合结果加 3, combOp 聚合结果加 3, 总共加 6,即 16
sc.parallelize([1, 2, 3, 4], 1).aggregate((3, 0), seqOp, combOp) # (16, 4)
## 初始值变成 (3, 0), 分两个区,seqOp 每个分区聚合结果加 3,共加 6,combOp 聚合结果加 3, 总共加 9,即 19
sc.parallelize([1, 2, 3, 4], 2).aggregate((3, 0), seqOp, combOp) # (19, 4) sc.parallelize([1, 2, 3, 4], 4).aggregate((3, 0), seqOp, combOp) # (25, 4)
sc.parallelize([1, 2, 3, 4]).aggregate((3, 0), seqOp, combOp) # 如果不写分区,默认为 cpu 核数个分区,即 4 核就分 4 个区

计算过程如下

aggregate 是针对 序列 进行操作的,还有一个 aggregateByKey 是针对 (key - value 对) 中的 key 进行 aggregate 操作的

spark算子篇-aggregate 系列的更多相关文章

  1. spark算子之Aggregate

    Aggregate函数 一.源码定义 /** * Aggregate the elements of each partition, and then the results for all the ...

  2. Spark算子篇 --Spark算子之aggregateByKey详解

    一.基本介绍 rdd.aggregateByKey(3, seqFunc, combFunc) 其中第一个函数是初始值 3代表每次分完组之后的每个组的初始值. seqFunc代表combine的聚合逻 ...

  3. Spark算子篇 --Spark算子之combineByKey详解

    一.概念 rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s@%s" %(a,b), lambda a,b:& ...

  4. spark算子篇-repartition and coalesce

    我们知道 RDD 是分区的,但有时候我们需要重新设置分区数量,增大还是减少需要结合实际场景,还有可以通过设置 RDD 分区数来指定生成的文件的数量 重新分区有两种方法:repartition and ...

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

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

  6. Spark算子总结及案例

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

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

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

  8. 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

    原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...

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

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

随机推荐

  1. 关于自定义sparkSQL数据源(Hbase)操作中遇到的坑

    自定义sparkSQL数据源的过程中,需要对sparkSQL表的schema和Hbase表的schema进行整合: 对于spark来说,要想自定义数据源,你可以实现这3个接口: BaseRelatio ...

  2. mongodb aggregate 聚合 操作(扁平化flatten)

    mongodb自带的函数非常多,最近用mongo做持久化数据库,遇到一个需求:子文档是个数组,把数组里的各个字段扁平化合到根文档中,查过资料后(主要是mongodb的文档和stackoverflow) ...

  3. vue 登录页面填坑

    上边的导航头,会显示在登陆页面上,暂时的解决办法实: <template> <div style="position: fixed; top:0px; left:0px;h ...

  4. Java学习之==>Java8 新特性详解

    一.简介 Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.Java 8是 Java 自 Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库. ...

  5. Eclipse 设置护眼背景色

    Eclipse 设置护眼背景色 1.设置字体大小 Window --> Preferences --> General --> Apprearance --> Colors a ...

  6. SQL- 将一张表的数据插入到另一张表,表结构不一致(加条件)

    公司业务需要,在对表进行操作的时候将操作人和操作记录记录到日志表里.记录下来以供参考和学习. 首先准备两张测试表:Info以及InfoLog 1.表结构相同的情况下: insert into Info ...

  7. Django Model 基础数据库操作应用

    https://blog.csdn.net/Mrzhangjwei/article/details/53001841 一.数据库操作1.创建model表 基本结构: from django.db im ...

  8. 微信路由navigateTo

    // pages/index/index.js Page({ /** * 页面的初始数据 */ data: { res:2 }, search: function(e) { var that = th ...

  9. Django学习笔记(二)URL编写规则

    先在根目录以及每个app内添加一个空白的urls.py(此处根目录指项目同名文件夹内).程序收到用户请求时,先在根目录的urls.py查找该URL属于哪个app,再从app的urls.py找到具体的U ...

  10. webdriervAPI(XPath元素定位)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...