combineByKey算子

combineByKey算子是Spark中一个非常高级的算子,很多我们常用的算子底层都是封装的他

combineByKey: 的主要作用是将同一个key的数据就行聚合,其实就是对相同的K,不同的V进行一顿操作让他变成新的V
但是combineByKey比较特殊的地方是,他的三个主要函数的含义。
combineByKey有三个主要的函数分别是:
createCombiner 对于当前KV中的V进行改造生成新的V,相当于mergeValue之前你有一次修改Value的机会
mergeValue 在同一分片中,相同的Key进行合并的时候,
mergeCombiner 将不同分片中的同一个key的combiner进行合并

这里我们需要注意的是这与其他我们常用的算子不一样的是,这里涉及到了分片,先同分片在不同的分片合并

代码如下,求一个key的平均值以及value出现的次数

val conf = new SparkConf().setAppName("SearchSessionAnalysis").setMaster("local[4]")
    val sc: SparkContext = new SparkContext(conf)
    val array = Array(("a1", 100),("a2", 102), ("a1", 104), ("a2", 101),  ("a2", 110))
    val arrayRdd = sc.parallelize(array)
    val d = arrayRdd.combineByKey(value =>(value,1),
      (c:(Int, Int),newValue) => {(c._1+newValue, c._2+1)},
      (c:(Int, Int),newc:(Int, Int)) => {
        (c._1+newc._1, c._2+newc._2)
      }
    )

    val d2 = arrayRdd.combineByKey(value =>value,
      (c:Int,newValue) => c+newValue,
      (c:Int,newc:Int) => {
        (c+newc)/2
      }
    )
    println(d.collect())

你可能感兴趣的:(大数据)