reduceByKey、foldByKey、aggregateByKey、combineByKey的区别

本文详细介绍了Spark中的四个关键操作:reduceByKey、foldByKey、aggregateByKey和combineByKey,包括它们的定义、操作流程、区别及使用场景。reduceByKey和foldByKey在Map端和Reduce端的聚合规则相同,但foldByKey有一个初始值参与聚合。aggregateByKey允许Map端和Reduce端的聚合规则不同,并有一个初始值。而combineByKey则更灵活,不仅聚合规则可异,还允许根据数据转换结构。这四个操作常用于按Key分组聚合RDD。
摘要由CSDN通过智能技术生成

思考 :
reduceByKey、flodByKey、aggregateByKey、combineByKey 的区别?
本质区别 : Map端聚合和Reduce聚合规则是否相同,是不是要在Map的实现合并器

  1. reduceByKey

    1. 定义
      def reduceByKey(partitioner: Partitioner, func: (V, V) => V): RDD[(K, V)]
    2. 操作流程
      1. 在每个分区节点上将 数据根据key 分组 (相当于Mr中的map方法)
        输出 key,iter(value1,value2…)
      2. 在每个分区节点上将 分组后的数据 进行合并 (相当于Mr中的map端合并)
        合并流程
        输入 : key,iter(value1,value2…)
        func(func(value1,value2),value3)… => 聚合结果和value1类型一致
        从左往右依次聚合
        输出 key,value
      3. 每个分区处理完后, reduce端会拉取处理结果,并对数据根据key 进行reduce操作 (相当于Mr中的reduce方法)
        合并流程
        输入 : key,iter(value1,value2…)
        func(func(value1,value2),value3)…
        从左往右依次聚合
        输出 key,value
      4. 对处理完的结果数据,根据 指定的分区器,将结果分区(可选)
        不指定时,使用默认分区器,分区个数和父Rdd保持一致
    3. note
      1. reduceByKey相当于Mr程序,开启了Map端合并,且合并规则和reduce规则相同
      2. reduceByKey 只能将 Rdd[K,V]转换成 Rdd[K,V]
        Key、Value的类型不会改变
        示例 Rdd[String,Int] reduceByKey
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值