第五章_Spark核心编程_Rdd_转换算子_keyValue型_foldByKey
1. 定义
/* * 1. 定义 * def foldByKey(zeroValue: V)(func: (V, V) => V): RDD[(K, V)] * def foldByKey(zeroValue: V,partitioner: Partitioner)(func: (V, V) => V): RDD[(K, V)] * def foldByKey(zeroValue: V, numPartitions: Int)(func: (V, V) => V): RDD[(K, V)] * * 2. 功能 * 1. 分区内 根据相同的key,对value分组 * 示例 : * key,iter(value1,value2,value3) * 2. 根据传入的规则 reduce分区内的 相同key的 value * 示例 : * func(zeroValue,value1) * 3. 聚合后输出每个分区的结果 key,value * * 4. 拉取每个分区 的key,value ,并对相同key 的value做reduce操作(存在Shuffle过程) * 示例 : func(zeroValue,value1)... * * 5. 对 所有分区的key 做完reduce操作后,按照指定的 partitioner 重新对结果分区 * 不指定分区器时,用默认分区器 HashPartitoner * 不指定分区个数时,用父Rdd分区个数 * * 3. note * 1. zeroValue 会参与 分区内和分区间的 reduce操作 * 2. foldByKey 等价于 aggregateByKey(分区内函数=分区间函数) * * */
2. 示例
object aggregateTest 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.foldByKey("")( (zeroValue, value) => zeroValue + "-" + value ) println(s"${rdd2.collect().mkString(",")}") sc.stop() }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界