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)。经过实验,最后的结果也正是如此。

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

Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性

 本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =。以后还是要按时完成任务。废话不多说,第四章-第六章主要讲了三个内容:键值对、数据读取与保存与Spark的两个共享特性(累加器和广播...

Learning Spark (Python版) 学习笔记(二)----键值对、数据读取与保存、共享特性

http://www.cnblogs.com/charlotte77/p/5437639.html   本来应该上周更新的,结果碰上五一,懒癌发作,就推迟了 = =。以后还是...

Machine Learning With Spark学习笔记(在10万电影数据上训练、使用推荐模型)

我们现在开始训练模型,还输入参数如下: rank:ALS中因子的个数,通常来说越大越好,但是对内存占用率有直接影响,通常rank在10到200之间。 iterations:迭代次数,每次迭代都会减...
  • LXYTSOS
  • LXYTSOS
  • 2015年08月14日 16:56
  • 3942

《machine learning with spark》学习笔记--推荐模型

Prepare dataDataSource DownloadUpload data to HDFSIt’s easy for the programmers who are familiar to ...

Learning Spark 学习笔记 第五章 加载或保存数据

大致分为三种数据源: 1.文件和文件系统 本地或者分布式文件系统的文件,可以为text,json,sequenceFile和协议缓存格式的文件数据。 2.结构化数据(Spark SQL) 第九...

Learning Spark 学习笔记 第三章 RDDs编程

概述: RDD(resilient distributed dataset,弹性分布式数据集),是一个抽象概念,是可分布式存储和处理的数据的集合。spark中可进行RDD的创建;转化已存在的RDD为...

Learning Spark 学习笔记 第四章 使用键/值对

spark的RDDs很多操作都是基于键值对的。 Creating Pair RDDs: 例如scala :val pairs = lines.map(x => (x.split(" ")(0),...

Learning Spark笔记7-聚合

聚合 当数据集中的数据是key/value时,通常是使用相同的键汇总所有元素的统计信息。 reduceByKey()类似于reduce();他们都是使用函数来合并值。reduceB...

Learning Spark笔记2-RDD介绍

RDDs编程 一个RDD是一个简单分布式元素集合。在Spark中所有的工作都表达为要么创建新的RDDs,转变已存在RDDs,要么在RDDs中执行计算操作。在后台,Spark会自动在集群中分发RDD...

Learning Spark 笔记(六) -- 指定分区信息改善join()等的操作

9 . 默认情况下,join()操作会对两个RDD的主键做哈希以分区,通过网络将主键相同的元素发送到同一台机器上,然后根据相同的主键再进行连接。例子如下:val sc = new SparkConte...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Learning Spark 笔记(二) -- aggregate初值初探
举报原因:
原因补充:

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