Spark中的aggregate算子

aggragete算子作为spark的算子之一,虽然没有map,reduce算子使用的多但是也是一个不容忽略的算子,但是关于这个算子的用法很多解释都含糊不清 ,下面就记载下来以备以后观看。

aggregate在scala语言中本来就存在,它的输入值和返回值的类型可以不一致,而reduce函数输入和输出数据类型 必须一致。首先他需要接受一个输入的初始值,然后再接受一个函数f1,把数据进行分块,按照分块计算各个分块之间的数据得到一个结果,它还有一个函数f2参数,使用这个参数对分块求得的结果再次进行计算。

在spark中aggregate也是接受一个初始值,在各个分区之间应用f1函数,然后分区之间应用f2函数最后得到一个结果进行返回。

eg:”a1”,(“A”,”1,2,3”) 这种字符串的 “1,2,3”为某种聚合值,对所有的这种类型的值按照列进行累加求和,下面就可以使用这种函数进行操作。以下为原生scala中的操作,在spark中该函数(算子)的使用方法也是相同的。

object Fun{

  def main(args: Array[String]): Unit = {
    val seq = Seq(("a1",("A","1,2,3")),("a2",("A","1,2,3")),("a3",("A","1,2,3")),("a4",("A","1,2,3")))

    val res = seq.aggregate("0,0,0")( (x,y) => getAddition(x, y._2._2), (x,y) => getAddition(x,y))
    println(res)
  }
  def getAddition(fist:String,second:String):String ={
    val s1 = fist.split("\\,")
    val s2 = second.split("\\,")
    val resSeq = for (i <- 0 until s1.length) yield (s1(i).toInt + s2(i).toInt).toString
    resSeq.mkString(",")
  }
}

运行结果:
4,8,12


在spark中使用算子 就不举例说明了,因为和scala中接受的参数一致,都是需要一个初始值,然后两个函数作为参数。
————————————————
版权声明:本文为CSDN博主「天心有情」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_35045195/article/details/81542580

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值