spark算子篇-aggregate 系列
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 系列的更多相关文章
- spark算子之Aggregate
Aggregate函数 一.源码定义 /** * Aggregate the elements of each partition, and then the results for all the ...
- Spark算子篇 --Spark算子之aggregateByKey详解
一.基本介绍 rdd.aggregateByKey(3, seqFunc, combFunc) 其中第一个函数是初始值 3代表每次分完组之后的每个组的初始值. seqFunc代表combine的聚合逻 ...
- Spark算子篇 --Spark算子之combineByKey详解
一.概念 rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s@%s" %(a,b), lambda a,b:& ...
- spark算子篇-repartition and coalesce
我们知道 RDD 是分区的,但有时候我们需要重新设置分区数量,增大还是减少需要结合实际场景,还有可以通过设置 RDD 分区数来指定生成的文件的数量 重新分区有两种方法:repartition and ...
- (转)Spark 算子系列文章
http://lxw1234.com/archives/2015/07/363.htm Spark算子:RDD基本转换操作(1)–map.flagMap.distinct Spark算子:RDD创建操 ...
- Spark算子总结及案例
spark算子大致上可分三大类算子: 1.Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Value型的数据. 2.Key-Value数据类型的Tran ...
- Spark算子总结(带案例)
Spark算子总结(带案例) spark算子大致上可分三大类算子: 1.Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Value型的数据. 2.Key ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
- UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现
UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import ...
随机推荐
- android 开发随手记
1.Fragment 跳转到Activity 修改数据,修改完后从Activity 返回(返回键)Fragment ,要求刷新Fragment界面的数据 解决办法: 在Fragment中注册一个监听广 ...
- JavaWeb_(Hibernate框架)Hibernate与c3p0与Dbutils的区别
JavaWeb_(Hibernate框架)使用Hibernate开发用户注册功能 传送门 JavaWeb_(Hibernate框架)使用c3p0与Dbutils开发用户注册功能 传送门 Hiberna ...
- 【全网最优方法】JAVA初学:错误: 找不到或无法加载主类HelloWorld
JAVA初学:错误: 找不到或无法加载主类 HelloWorld 我这是看的黑马2019网课(B站)出现的问题. 放一下别人的图,我也是大概的问题:就是javac没问题,java却无论怎么弄都报错. ...
- JNI使用常见错误
1. java.lang.UnsatisfiedLinkError: Couldn't load hello: **findLibrary returned null** 解决方案: * 如果处理器平 ...
- 自定义组合控件SettingItemView的简单实现
package com.loaderman.settingitemviewdemo; import android.os.Bundle; import android.support.v7.app.A ...
- MYSQL 中 MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比
1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...
- tensorflow文件读取
1.知识点 """ 注意:在tensorflow当中,运行操作具有依赖性 1.CPU操作计算与IO计算区别: CPU操作: 1.tensorflow是一个正真的多线程,并 ...
- Introduction to pointers in C
The basic purpose of developing a C programming tutorial for this website – CircuitsToday – is to ma ...
- Web23_Listener
记得在web.xml配置<listener-class>监听器的Copy Qualified Name复制类全名</listener-class> <listener-c ...
- Python--偏函数(Partial)
Python--偏函数(Partial) 出处 https://blog.csdn.net/Appleyk/article/details/77609114 一.什么是偏函数? (1)在Pyth ...