Spark高级函数应用【combineByKey】

一.combineByKey算子简介

  功能:实现分组自定义求和及计数。

  特点:用于处理(key,value)类型的数据。

  实现步骤:

    1.对要处理的数据进行初始化,以及一些转化操作

    2.检测key是否是首次处理,首次处理则添加,否则则进行分区内合并【根据自定义逻辑】

    3.分组合并,返回结果

二.combineByKey算子代码实战

 1 package big.data.analyse.scala.arithmetic
 2 
 3 import org.apache.spark.sql.SparkSession
 4 /**
 5   * Created by zhen on 2019/9/7.
 6   */
 7 object CombineByKey {
 8   def main (args: Array[String]) {
 9     val spark = SparkSession.builder().appName("CombineByKey").master("local[2]").getOrCreate()
10     val sc = spark.sparkContext
11     sc.setLogLevel("error")
12 
13     val initialScores = Array((("hadoop", "R"), 1), (("hadoop", "java"), 1),
14                               (("spark", "scala"), 1), (("spark", "R"), 1), (("spark", "java"), 1))
15 
16     val d1 = sc.parallelize(initialScores)
17 
18     val result = d1.map(x => (x._1._1, (x._1._2, x._2))).combineByKey(
19       (v : (String, Int)) => (v : (String, Int)), // 初始化操作,当key首次出现时初始化以及执行一些转化操作
20       (c : (String, Int), v : (String, Int)) => (c._1 + "," + v._1, c._2 + v._2), // 分区内合并,非首次出现时进行合并
21       (c1 : (String,Int),c2 : (String,Int)) => (c1._1 + "," + c2._1, c1._2 + c2._2)) // 分组合并
22       .collect()
23 
24     result.foreach(println)
25   }
26 }

三.combineByKey算子执行结果

  

猜你喜欢

转载自www.cnblogs.com/yszd/p/11481923.html