一、概述

聚合执行本质上是将 RDD 的每个 Partition 中的数据进行处理。对于每个 Partition 中的输入数据即 Input(通过 InputIterator 进行读取),经过聚合执行计算之后,得到相应的结果数据即 Result(通过 AggregationIterator 来访问)。

二、执行框架 AggregationIterator

聚合执行框架指的是聚合过程中抽象出来的通用功能,包括聚合函数的初始化、聚合缓冲区更新合并函数和聚合结果生成函数等。这些功能都在聚合迭代器(Aggregationlterator)中得到了实现。

AggregationIterator

三、SortAggregateExec

SortAggregateExec 是一种基于排序的聚合实现,在进行聚合之前,会根据 grouping key 进行分区并在分区内排序,将具有相同
grouping key 的记录分布在同一个 partition 内且前后相邻。聚合时只需要顺序遍历整个分区内的数据,即可得到聚合结果。

四、HashAggregateExec

HashAggregateExec 构建一个 Map 类型的数据结构,以分组的属性作为 key,将数据保存到该 Map 中并进行聚合计算即可。然而,在实际系统中,无法确定性地申请到足够的空间来容纳所有数据,底层还涉及复杂的内存管理,因此相对SortAggregateExec的实现方式反而更加复杂。

五、ObjectHashAggregateExec