Spark aggregateByKey函数
2024-09-05 11:31:27
aggregateByKey与aggregate类似,都是进行两次聚合,不同的是后者只对分区有效,前者对分区中key进一步细分
def
aggregateByKey[U
:
ClassTag](zeroValue
:
U, partitioner
:
Partitioner)
(seqOp
:
(U, V)
=
> U, combOp
:
(U, U)
=
> U)
:
RDD[(K, U)]
def
aggregateByKey[U
:
ClassTag](zeroValue
:
U, numPartitions
:
Int)
(seqOp
:
(U, V)
=
> U, combOp
:
(U, U)
=
> U)
:
RDD[(K, U)]
def
aggregateByKey[U
:
ClassTag](zeroValue
:
U)
(seqOp
:
(U, V)
=
> U, combOp
:
(U, U)
=
> U)
:
RDD[(K, U)]
//数据被分为两个分区
//分区1:(1,3),(1,2)
//分区2:(1, 4),(2,3),(2,4)
scala> var data = sc.parallelize(List((,),(,),(, ),(,),(,)),)
data: org.apache.spark.rdd.RDD[(Int, Int)] = ParallelCollectionRDD[] at parallelize at <console>: //每个分区中按key聚合
scala> def InnerCom(a:Int, b:Int) : Int ={
| println("InnerCom: " + a + " :" + b)
| math.max(a,b)
| }
InnerCom: (a: Int, b: Int)Int //分区间的聚合
scala> def PartitionCom(a:Int, b:Int) : Int ={
| println("PartitionCom: " + a + " :" + b)
| a + b
| }
PartitionCom: (a: Int, b: Int)Int //第一个分区中只有一个key,两个元素
//聚合后结果为(1,3)
//第二个分区中两个key,1、2
//聚合后结果为(1,4)、(2,3)
//二次聚合后结果为(1,7)(2,4)
scala> data.aggregateByKey()(InnerCom, PartitionCom).collect
InnerCom: :
InnerCom: :
InnerCom: :
InnerCom: :
InnerCom: :
PartitionCom: :
res: Array[(Int, Int)] = Array((,), (,))
最新文章
- JMeter学习-022-JMeter 分布式测试(性能测试大并发、远程启动解决方案)
- 使用阿里云负载均衡遭遇的http重定向https的问题
- mybatis跨XML引用
- WPF画线问题,几千条以后就有明显的延迟了。
- 10.28&;29(NOIP模拟&;修正&;总结)
- Log4net Dll用法
- [转]硬盘分区表知识——详解硬盘MBR
- 转载:XPath基本语法
- DIB位图文件的格式、读取、保存和显示(转载)
- highcharts 切换
- BZOJ_1027_[JSOI2007]_合金_(计算几何+Floyd求最小环)
- Linux系统下用C语言获取MAC地址
- python 全栈开发,Day4(正式)
- loadrunner下载资源时步骤下载超时 (120 seconds) 已过期
- oracle xe在centos下的安装(更)
- (常用)loogging模块及(项目字典)
- git命令详解( 二 )
- vue引入bootstrap——webpack
- 初识Swift中的值和引用,循坏引用、代理的注意点
- java常量类编译问题