zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Java Object类及其常用方法
    Java 抽象类和抽象方法
    Java 多态
    Java 继承
    Java Scanner类
    正则表达_1
    「暑期集训day14」掠影
    「暑期集训day13」苦闷
    「暑期集训day12」苦楚
    「暑期集训day11」旧殤
  • 原文地址:https://www.cnblogs.com/mecca/p/5617833.html
Copyright © 2011-2022 走看看