第五章_Spark核心编程_Rdd_转换算子_keyValue型_combineByKey
2022/3/25 20:52:42
本文主要是介绍第五章_Spark核心编程_Rdd_转换算子_keyValue型_combineByKey,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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() }
这篇关于第五章_Spark核心编程_Rdd_转换算子_keyValue型_combineByKey的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework
- 2025-01-03如果 Azure-Samples/aks-store-demo 使用了 Score 会怎样?
- 2025-01-03Apache Flink概述:实时数据处理的利器
- 2025-01-01使用 SVN合并操作时,怎么解决冲突的情况?-icode9专业技术文章分享
- 2025-01-01告别Anaconda?试试这些替代品吧