1. groupByKey
- 定义:groupByKey([numPartitions])、
- 解释:只对键值对类型RDD生效,同时返回的是一个新的RDD[(key,Iterator[Value])]
- 案例:
| def groupByKeyOper(sc: SparkContext): Unit = { |
| println("----------------groupByKey开始------------------") |
| val rdd = sc.textFile("hdfs://node1:9000/wc.txt") |
| val flatMap: RDD[String] = rdd.flatMap((line: String) => { |
| line.split(" ") |
| }) |
| val map = flatMap.map((_, 1)) |
| val groupByKey: RDD[(String, Iterable[Int])] = map.groupByKey() |
| val ptln: String = groupByKey.collect().mkString("=") |
| println(ptln) |
| |
| println("----------------groupByKey结束------------------") |
| } |
2. reduceByKey
- 定义:reduceByKey(func, [numPartitions])
- 解释:对相同的key值的value数据通过func函数进行聚合操作(总和、最大值、最小值...)返回的是一个RDD[(Key,Value的类型---value代表的是相同key值聚合之后的结果)]
- 案例:
| def reduceByKeyOper(sc: SparkContext) = { |
| println("----------------reduceByKey开始------------------") |
| val rdd = sc.textFile("hdfs://node1:9000/wc.txt") |
| val flatMap: RDD[String] = rdd.flatMap((line: String) => { |
| line.split(" ") |
| }) |
| val map = flatMap.map((_, 1)) |
| val reduceByKey: RDD[(String, Int)] = map.reduceByKey((_ + _)) |
| println(reduceByKey.collect().mkString("=")) |
| |
| println("----------------reduceByKey结束------------------") |
| } |
3. aggregateByKey
- 定义:aggregateByKey(zeroValue)(seqOp, combOp, [numPartitions])
- 解释:
(1)零值:初始值
(2)seqOp函数:对每一个分区中key值相同的value数据和零值聚合操作
(3)combOp函数:对不同分区key值相同已经通过seqOp函数计算出来的聚合结果 在和零值聚合一次
当前这个算子是一个转换算子,返回一个新的键值对类型的RDD 其中RDD中key还是原来的key value是aggregateByKey聚合之后的结果
- 案例:
| def aggregateByKeyOper(sc: SparkContext) = { |
| println("----------------reduceByKey开始------------------") |
| val rdd = sc.textFile("hdfs://node1:9000/wc.txt") |
| val flatMap: RDD[String] = rdd.flatMap((line: String) => { |
| line.split(" ") |
| }) |
| val map = flatMap.map((_, 1)) |
| val agg: RDD[(String, Int)] = map.aggregateByKey(0)( |
| (a: Int, b: Int) => { |
| a + b |
| }, |
| (a: Int, b: Int) => { |
| a + b |
| } |
| ) |
| agg.foreach(println(_)) |
| println("----------------reduceByKey结束------------------") |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?