• RDD-aggregateByKey


    参数:(zeroValue:U,[partitioner: Partitioner]) (seqOp: (U, V) => U,combOp: (U, U) => U)

    1. 作用:在kv对的RDD中,,按key将value进行分组合并,合并时,将每个value和初始值作为seq函数的参数,进行计算,返回的结果作为一个新的kv对,然后再将结果按照key进行合并,最后将每个分组的value传递给combine函数进行计算(先将前两个value进行计算,将返回结果和下一个value传给combine函数,以此类推),将key与计算结果作为一个新的kv对输出。

    2. 参数描述:

    (1)zeroValue:给每一个分区中的每一个key一个初始值;

    (2)seqOp:函数用于在每一个分区中用初始值逐步迭代value;

    (3)combOp:函数用于合并每个分区中的结果。

    案例:

    // 创建一个有2个分区的RDD
    val pairRDD = sc.parallelize(List( ("cat",2), ("cat", 5), ("mouse", 4),("cat", 12), ("dog", 12), ("mouse", 2)), 2) // pairRDD: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[12] at parallelize at <console>:24 pairRDD.collect // res27: Array[(String, Int)] = Array((cat,2), (cat,5), (mouse,4), (cat,12), (dog,12), (mouse,2))
    // 计算每个分区相同key对应值的加和,最后求结果之和 pairRDD.aggregateByKey(0)(_+_,_+_).collect // res28: Array[(String, Int)] = Array((dog,12), (cat,19), (mouse,6))

     以下是pairRDD.aggregateByKey(0)(_+_,_+_)的逻辑图。

    注意:

    RDD内只是逻辑上的数据,不存物理数据。一个Partition对应一个Task,Task负责处理运算对应分区的数据。

    aggregateByKey有Shuffle的过程,创建RDD的时候有多少个Partition,新生成的RDD就有多少个Partition。

  • 相关阅读:
    计算户数
    日期时间时区函数(Power Query 之 M 语言)
    调用用友u8凭证控件
    用友u8应收,应付,收款,付款导入工具
    用友二次开发之自动调拔
    用友二次开发之发货单辅助工具
    用友t+报表之CS开发
    导出jar包
    论不断变化的词和句
    别说欧式中文!
  • 原文地址:https://www.cnblogs.com/lucas-zhao/p/12101839.html
Copyright © 2020-2023  润新知