Learning Spark 笔记(二) -- aggregate初值初探

原创 2016年08月28日 17:43:30

3 . fold和aggregate都需要初值,且每个初值应用到每个分区。例子如下:

    val input = sc.parallelize(List(1,2,3,4,5,6),3)
    val result = input.aggregate((0, 0))(                              
        (acc, value) => (acc._1 + value, acc._2 + 1),
        (acc1, acc2) => (acc1._1 + acc2._1, acc1._2 + acc2._2))

最终的结果是21/6;
但是如果将初值设为(0,1),那么最终的结果将是21/10,分母是10的原因是产生了4个累加器。将上面改变为

    val input = sc.parallelize(List(1,2,3,4,5,6),5)
    val result = input.aggregate((0, 1))(                              
        (acc, value) => {
            println("seq: "+acc,value)
            (acc._1 + value, acc._2 + 1)},
        (acc1, acc2) => {
            println("com: "+acc1+" "+acc2)
            (acc1._1 + acc2._1, acc1._2 + acc2._2)
        })

输出结果如下:

(seq: (0,1),5)
(seq: (0,1),3)
(seq: (0,1),1)
(seq: (3,2),4)
(seq: (5,2),6)
(seq: (1,2),2)
com: (0,1) (7,3)
com: (7,4) (11,3)
com: (18,7) (3,3)
result: (Int, Int) = (21,10)

由上面的结果可以看到一共有4个(0,1)输出,其中有3个是第一个函数在各个分区中产生的,最后1个则是第2个函数聚集的时候产生的,在此猜想:只要是产生一个累加器或者新的分区,最开始设置的初值就会产生影响。为了验证,将分区数设为5,则预想会有6个累加器产生,最后的结果应该是(21,12)。经过实验,最后的结果也正是如此。

版权声明:本文为博主原创文章,未经博主允许不得转载。

理解Spark RDD中的aggregate函数

针对Spark的RDD,API中有一个aggregate函数,本人理解起来费了很大劲,明白之后,mark一下,供以后参考。 首先,Spark文档中aggregate函数定义如下 def aggreg...
  • qingyang0320
  • qingyang0320
  • 2016年06月07日 15:15
  • 10530

spark函数讲解:aggregate

函数原型: def aggregate[U](zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)(implicit arg0: ClassTag[...
  • tolcf
  • tolcf
  • 2016年07月13日 18:44
  • 1149

spark中的aggregate action的实现过程

例子代码如下: public final class BasicAvg { public static class AvgCount implements Serializable { ...
  • u012684933
  • u012684933
  • 2015年05月22日 18:12
  • 1163

Spark SQL中的聚合(Aggregate)实现

Spark SQL中的聚合(Aggregate)实现Sort Based Aggregate首先来说说实现比较简单(但实际执行起来却不简单)的Sort Based Aggregate。顾名思义,这是一...
  • doggie_wangtao
  • doggie_wangtao
  • 2017年04月08日 16:50
  • 1923

spark rdd aggregate (python语言)

aggregate(zeroValue, seqOp, combOp) seqOp操作会聚合各分区中的元素,然后combOp操作把所有分区的聚合结果再次聚合,两个操作的初始值都是zeroValue. ...
  • u011011025
  • u011011025
  • 2017年07月27日 16:18
  • 770

Spark RDD的aggregate算子

aggregate算子签名: def aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U):...
  • Dax1n
  • Dax1n
  • 2017年06月09日 22:24
  • 471

aggregate vs treeAggregate

aggregate与treeAggregate对比
  • lookqlp
  • lookqlp
  • 2016年08月04日 17:16
  • 1605

Spark操作—aggregate、aggregateByKey详解

aggregateByKey函数对PairRDD中相同的Key值进行聚合操作,在聚合过程中同样使用了一个中立的初始值。和aggregate函数类似,aggregateByKey返回值的类型不需要和RD...
  • u013514928
  • u013514928
  • 2017年02月23日 21:50
  • 4317

【Spark Java API】Action(1)—reduce、aggregate

spark java api...
  • a6210575
  • a6210575
  • 2016年08月20日 11:41
  • 721

《机器学习》(Machine Learning)——Andrew Ng 斯坦福大学公开课学习笔记(二)

第3集  欠拟合和过拟合的概念 一、线性回归的解释 ,最后一项表示误差项(独立同分布),对前面未被建模的因素进行考虑,一般误差项的加和,根据中心极限定理,符合高斯分布 推出:...
  • u013896242
  • u013896242
  • 2015年08月06日 21:02
  • 1364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Learning Spark 笔记(二) -- aggregate初值初探
举报原因:
原因补充:

(最多只允许输入30个字)