Spark-源码学习-SparkSQL-聚合体系-执行-ObjectHashAggregateExec
一、概述
聚合执行本质上是将 RDD 的每个 Partition 中的数据进行处理。对于每个 Partition 中的输入数据即 Input(通过 InputIterator 进行读取),经过聚合执行计算之后,得到相应的结果数据即 Result(通过 AggregationIterator 来访问)。
二、执行框架 AggregationIterator
聚合执行框架指的是聚合过程中抽象出来的通用功能,包括聚合函数的初始化、聚合缓冲区更新合并函数和聚合结果生成函数等。这些功能都在聚合迭代器(Aggregationlterator)中得到了实现。
三、SortAggregateExec
SortAggregateExec 是一种基于排序的聚合实现,在进行聚合之前,会根据 grouping key 进行分区并在分区内排序,将具有相同
grouping key 的记录分布在同一个 partition 内且前后相邻。聚合时只需要顺序遍历整个分区内的数据,即可得到聚合结果。
四、HashAggregateExec
HashAggregateExec 构建一个 Map 类型的数据结构,以分组的属性作为 key,将数据保存到该 Map 中并进行聚合计算即可。然而,在实际系统中,无法确定性地申请到足够的空间来容纳所有数据,底层还涉及复杂的内存管理,因此相对SortAggregateExec的实现方式反而更加复杂。
五、ObjectHashAggregateExec
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker!
评论
ValineTwikoo