Scala 学习之 aggregate函数

摘要:
fold和reduce都要求函数的返回值类型与我们操作的RDD类型相同,并且记录方便过程中元素的计数和数量,这要求我们返回一个二进制组。可以先对数据使用映射操作。聚合函数使我们摆脱了返回值类型必须与输入RDD类型相同的限制。我们需要期望返回的类型的初始值,1valz=sc。并行化(List(1,0))(//初始值3(acc,

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函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ModelAndView学习笔记原生JS添加类名 删除类名下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

QT信号槽详解

1         QT信号槽详解 1.1  信号和槽的定义 信号是触发信号,例如按钮的点击触发一个clicked信号,槽是用来接收信号,并处理信号,相当于信号响应函数。一个信号可以关联多个槽函数,信号也可以连接信号。 要使用信号槽,类必须继承与QObject类或者其子类,否则无法识别槽函数错误。在类的定义开头需要添加宏定义Q_OBJECT。如下 clas...

Python——PYQT:控件基本使用

QtGui.QComboBox控件常用函数: .addItem(string) #添加字符串项到Item .addItems(list) #添加列表或元组元素到Item .clear() #清除所有Item .clearEditText() #清除编辑框内容 .count() #返回Item数目 .currentIndex...

[转]【C/C++】Linux下使用system()函数一定要谨慎

曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。当初因为这个函数风险较多,故抛弃不用,改用其他的方法。这里先不说我用了什么方法,这里必须要搞懂system()函数,因为还是有很多人用...

C#7.0新特性和语法糖详解

伴随Visual Studio 2017的发布,C#7.0开始正式走上工作岗位。对于早已熟悉了旧版本C#的开发者来说,C#7.0增加的不少新特性和语法糖能在很大程度上提升编程效率并降低出错率。本文将阐述C#7.0给出的9个改进。 1、元组——更优雅地返回多个值 之所以将元组放在第一位,是因为它对C#编程体验的提升实在是太大了。元组这个概念在以前就已经被引入...

Golang中的插件开发

  插件化开发提供了很多便利,可动态扩展程序的相关功能,如Windows中的DLL、Linux中的So文件、还有IDEA中的插件,应用范围不可谓不广;   在Golang中提供了自己的插件机制,可使用其进行插件化开发;在Golang的plugin包中提供了加载插件、调用插件中函数的相关方法; Golang中的插件机制使用非常简单;就只有这么三步:   1、...

Python实现网页自动化-浏览器查找元素(二)

前言 在上一节中(https://mp.weixin.qq.com/s/lqYEjiqA4eLI59GkDEpKcg)已经部署了Selenium+chromedriver的开发环境,在真正的开发之前,还需要学会利用浏览器来查找网页元素。 因为Selenium是通过程序来自动操控网页的控件元素,比如单击某个按钮、输入文本框内容等,若网页中有多个同类型的元素,...