栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spark中aggregateByKey实现reduceByKey与groupByKey

Spark中aggregateByKey实现reduceByKey与groupByKey

Spark中aggregateByKey实现reduceByKey与groupByKey,下面为具体函数

  def aggregateByKeyToReduceBy(sc:SparkContext): Unit ={
    val rdd = sc.parallelize(List(("a",1),("b",2),("c",3),("a",2),("a",3),("b",3),("c",2)))
    rdd.reduceByKey(_+_).foreach(println)
    println("上面为reduceByKey的运算结果,下面为使用aggregateByKey算子的运算结果")

    val reduceByKeyRdd: RDD[(String, Int)] = rdd.aggregateByKey(0)(
      seqOp1,
      combOp1
    )
    reduceByKeyRdd.foreach(println)

  }
  //这里的参数arrayBuffer为rdd的value值的列表,v为rdd的value,这里为相同分区的聚合
  def seqOp1(c:Int,v:Int): Int ={
    c+v
  }
  //类似于上面那个函数,这里为不同分区相同key值value的聚合
  def combOp1(c1:Int,c2:Int): Int ={
    c1+c2
  }

  
  def aggregateByKeyToGroupBy(sc:SparkContext): Unit ={
    val rdd = sc.parallelize(List(("a",1),("b",2),("c",3),("a",2),("a",3),("b",3),("c",2)))
    rdd.groupByKey().foreach(println)
    println("上面为用groupByKey效果,下面为使用aggregateByKey算子实现的效果")

    val groupByKeyRdd: RDD[(String, ArrayBuffer[String])] = rdd.aggregateByKey(ArrayBuffer[String]())(
      seqOp,
      combOp
    )
    groupByKeyRdd.foreach(println)
  }

  //这里的参数arrayBuffer为rdd的value值的列表,v为rdd的value,这里为相同分区的聚合
  def seqOp(arrayBuffer: ArrayBuffer[String],v:Int): ArrayBuffer[String] ={
    arrayBuffer.append(v.toString)
    arrayBuffer
  }
  //类似于上面那个函数,这里为不同分区相同key值value的聚合
  def combOp(arrayBuffer1: ArrayBuffer[String],arrayBuffer2: ArrayBuffer[String]): ArrayBuffer[String] ={
    arrayBuffer1 ++= (arrayBuffer2)
  }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/460701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号