ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

第五章_Spark核心编程_Rdd_转换算子_keyValue型_combineByKey

2022-03-25 20:00:40  阅读:185  来源: 互联网

标签:combineByKey value1 createCombiner 数据类型 value Rdd keyValue key List


1. 定义

  /*
  * 1. 定义
  *   def combineByKey[C](createCombiner: V => C,
  *                       mergeValue: (C, V) => C,
  *                       mergeCombiners: (C, C) => C,
  *                       numPartitions: Int): RDD[(K, C)]
  *
  *   def combineByKey[C](createCombiner: V => C,
  *                       mergeValue: (C, V) => C,
  *                       mergeCombiners: (C, C) => C,
  *                       partitioner: Partitioner,
  *                       serializer: Serializer = null): RDD[(K, C)]
  *
  *   def combineByKey[C](createCombiner: V => C,
  *                       mergeValue: (C, V) => C,
  *                       mergeCombiners: (C, C) => C): RDD[(K, C)]
  *
  *   createCombiner : 将相同key的第一个value,进行数据类型转换
  *   mergeValue : 分区内 相同key 聚合规则
  *   mergeCombiners : 分区间 相同key 聚合规则
  *
  * 2. 功能
  *     1. 对 key-value型rdd 按相同的key 对value进行聚合
  *     2. 可以将 Rdd[(K,V)]  转换为 Rdd[(K,C)]
  *
  * 3. 操作流程
  *     1. 分区内 对相同的key 进行分组
  *         key iter(value1,value2,value3)
  *
  *     2. 分区内 对相同key 的value进行聚合
  *         1. 将 value1 转换为 createCombiner(value1)=数据类型C
  *         2. 按照指定的规则对 value进行聚合
  *            mergeValue(createCombiner(value1),value2) => 数据类型C
  *            note : createCombiner(value1),value2类型可能不一致
  *         3. 合并完结果为
  *            key,数据类型C
  *
  *     3. 分区间 对相同key 的value进行聚合
  *         1.按照指定的规则对 value进行聚合
  *            mergeCombiners: (数据类型C, 数据类型C) => 数据类型C
  *
  * */

2. 示例

  object combineByKeyPakTest extends App {

    val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("distinctTest")

    val sc: SparkContext = new SparkContext(sparkconf)

    val rdd: RDD[(Int, String)] = sc.makeRDD(List((2, "x1"), (2, "x2"), (2, "x3"), (4, "x4"), (5, "x5"), (5, "x6"), (6, "x7")), 2)

    private val rdd2 = rdd.combineByKey(
      //转换 value类型为List
      (tp) => {
        println(s"转换:${tp}")
        List[String](tp)
      },
      (list: List[String], value1: String) => {
        list :+ value1
      }
      , (list1: List[String], list2: List[String]) => {
        list1.union(list2)
      }


    )

    println(s"${rdd2.collect().mkString(",")}")

    sc.stop()
  }

 

标签:combineByKey,value1,createCombiner,数据类型,value,Rdd,keyValue,key,List
来源: https://www.cnblogs.com/bajiaotai/p/16056426.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有