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((,), (,))

最新文章

  1. JMeter学习-022-JMeter 分布式测试(性能测试大并发、远程启动解决方案)
  2. 使用阿里云负载均衡遭遇的http重定向https的问题
  3. mybatis跨XML引用
  4. WPF画线问题,几千条以后就有明显的延迟了。
  5. 10.28&amp;29(NOIP模拟&amp;修正&amp;总结)
  6. Log4net Dll用法
  7. [转]硬盘分区表知识——详解硬盘MBR
  8. 转载:XPath基本语法
  9. DIB位图文件的格式、读取、保存和显示(转载)
  10. highcharts 切换
  11. BZOJ_1027_[JSOI2007]_合金_(计算几何+Floyd求最小环)
  12. Linux系统下用C语言获取MAC地址
  13. python 全栈开发,Day4(正式)
  14. loadrunner下载资源时步骤下载超时 (120 seconds) 已过期
  15. oracle xe在centos下的安装(更)
  16. (常用)loogging模块及(项目字典)
  17. git命令详解( 二 )
  18. vue引入bootstrap——webpack
  19. 初识Swift中的值和引用,循坏引用、代理的注意点
  20. java常量类编译问题

热门文章

  1. 使用vue.js封装一个包含图片的跑马灯组件
  2. python学习笔记(三)---字典
  3. jstat命令查看JVM 的GC状态
  4. Spring5参考指南:IOC容器
  5. Spring5参考指南:AOP代理
  6. numpy库的学习笔记
  7. iOS架构入门 - MVC模式实例演示
  8. HTML5 Canvas指纹及反追踪介绍
  9. 初识DP动态规划
  10. P1465 序言页码 Preface Numbering (手推)