• 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
  • 相关阅读:
    在springboot下将mybatis升级为mybatis-plus
    2023年中国辣椒红素产量、需求量及行业市场规模分析[图]
    Redis系列---集群模式
    申请免费通配符证书
    C语言:文件操作
    基于Tree-LSTM网络语义表示模型
    卷妹的成长日记之javaweb day2
    趣谈网络协议_1
    系统移植部署开发阶段
    遍历用for还是foreach?
  • 原文地址:https://blog.csdn.net/twi_twi/article/details/127658999