• Spark编程:combineByKey与aggregateByKey异同


    combineByKey与aggregateByKey异同

    combineByKeyaggregateByKey
    不同点有三个参数列表而且不需要初始值只有两个参数列表且需要初始值

    相同点:两者都能映射key值分别进行分区内计算和分区间计算。

    深入代码

    aggregateByKey

    • aggregateByKey有两个参数列表
      • 第一个参数列表: 需要传递一个参数,表示为初始值
        当碰见第一个key时候,和value进行分区内计算
      • 第二个参数列表: 需要传递2个参数:
        第一个参数表示分区内计算
        第二个参数表示分区间计算
    //aggregateByKey有两个参数列表
    //第一个参数列表: zeroValue = 
    //	   需要传递一个参数,表示为初始值
    //     当碰见第一个key时候,和value进行分区内计算
    //第二个参数列表: 
    //	   需要传递2个参数:
    //     第一个参数表示分区内计算
    //     第二个参数表示分区间计算
    
    rdd.aggregateByKey(zeroValue = 0)(
        (x, y) => math.max(x, y),
        (x, y) => x + y
    ).collect().foreach(println)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    combineByKey

    • combineByKey方法需要三个参数:
      • 第一个参数: 将相同key的第一个数据进行结构转换,实现操作
      • 第二个参数: 分区内的计算规则
      • 第三个参数: 分区间的计算规则
    //combineByKey方法需要三个参数:
    //第一个参数: 
    // 将相同key的第一个数据进行结构转换,实现操作
    //第二个参数: 
    // 分区内的计算规则
    //第三个参数: 
    // 分区间的计算规则
    
    val newRDD: RDD[(String, (Int, Int))] = rdd.combineByKey(
        v => (v, 1),
        (t: (Int, Int), v) => {
           (t._1 + v, t._2 + 1)
        },
        (t1 Int: , t2: Int) => {
           (t1._1 + t2._1, t1._2 + t2._2)   
        }
    ) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    泰勒多项式
    【半监督图像分割】2021-CPS CVPR
    深度剖析:Dubbo使用Nacos注册中心的坑
    对React fiber的理解
    Arduino Cloud 现已支持乐鑫 ESP32-S2、S3 和 C3
    让 GPT-4 来修复 Golang “数据竞争”问题(续) - 每天5分钟玩转 GPT 编程系列(7)
    希尔排序C#
    无代码开发添加数据入门教程
    dubbo分布式服务框架入门
    Anaconda与Jupyter Notebook入门级详细使用教程
  • 原文地址:https://blog.csdn.net/twi_twi/article/details/127658999