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 ...
随机推荐
- AcWing:99. 激光炸弹(前缀和)
一种新型的激光炸弹,可以摧毁一个边长为 RR 的正方形内的所有的目标. 现在地图上有 NN 个目标,用整数Xi,YiXi,Yi表示目标在地图上的位置,每个目标都有一个价值WiWi. 激光炸弹的投放是通 ...
- 对象中 new this
构造函数 new后面调用函数,我们称为构造函数(首字母大写) Object() 我们把他视为一个构造函数,构造函数的本质就是一个函数,只不过构造函数的目的是为了创建新对象,为新对象进行初始化(设置对象 ...
- HDU 5858 Hard problem ——(计算几何)
其实这题最多是个小学奥数题- -,,看到别人博客各显神通,也有用微积分做的(我也试了一下,结果到最后不会积...). 思路如下(这两张图是网上找来的): 然后就很简单了,算三角形面积可以用海伦公式,也 ...
- [BZOJ4033]:[HAOI2015]树上染色(树上DP)
题目传送门 题目描述 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加 ...
- 石川es6课程---11、json
石川es6课程---11.json 一.总结 一句话总结: ` 感觉更方便了一点,增加了一些简写 ` key-value 一样时可以简写:console.log({ a,b}}) ` 里面函数可以简写 ...
- git *** Please tell me who you are.错误
GIT 中提示 please tell me who you are 如果使用git过程中出现了,please tell me who you are ,需要设置一下使用者的身份. 1.git c ...
- leetcode-hard-array-41. First Missing Positive-NO
mycode class Solution(object): def firstMissingPositive(self, nums): """ :type nums: ...
- linux搭建ftp配置文件
# Example config file /etc/vsftpd/vsftpd.conf## The default compiled in settings are fairly paranoid ...
- 转 Golang 入门 : 切片(slice)
https://www.jianshu.com/p/354fce23b4f0 切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合.切片是围绕动态数组的概 ...
- slub分配object
kmem_cache如下: 62struct kmem_cache { struct kmem_cache_cpu __percpu *cpu_slab; /* Used for retriving ...