Scala 学习之 aggregate函数

Posted 273度

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala 学习之 aggregate函数相关的知识,希望对你有一定的参考价值。

fold和reduce都要求函数的返回值类型需要和我们所操作的RDD类型相同,但是我们有时确实需要一个不同类型的返回值。eg:

在计算平均值时,需要记录便利过程中的计数以及元素的数量,这就需要我们返回一个二元组。可以先对数据使用map操作,来把元素转移为改元素和1的二元组,也就是我们希望的返回类型。这样reduce就可以以二元组的形式进行归约。

aggregate函数把我们从返回值类型必须与输入RDD类型相同的限制中解脱出来。与fold相似,使用aggregate时,需要我们期待返回的类型的初始值,然后通过一个函数吧RDD中的元素合并起来放入累加器。考虑到每个节点是在本地进行累加的,最终 还需要提供第二个函数来将累加器两两合并。eg:

1 val z = sc. parallelize ( List (1 ,2 ,3 ,4 ,5 ,6) , 2)
2 val result = z.aggregate((0,0))(//初始值
3   (acc,value)=>(acc._1+value,acc._2+1),//累加器 (元组累加元组结果,RDD单个元素值)=>(元组累加结果+RDD单个元素,元组累加计数+1)
4   (acc1,acc2)=>(acc1._1+acc2._1,acc1._2+acc2._2)//combine 合并函数 合并元组累加结果
5 )
6 val avg = result._1/result._2.toDouble

 

以上是关于Scala 学习之 aggregate函数的主要内容,如果未能解决你的问题,请参考以下文章

Scala学习之函数式风格编程

Scala学习之相同的函数名

大数据学习之Scala语言基本语法学习36

scala 学习之三 Function 和 Method

大数据学习之Scala中main函数的分析以及基本规则

Scala入门学习之包类与对象