3.3.3 数据汇集与索引构建
当顶点为多个线对象的交点时,该顶点将会有多个误差值。为了保留地理对象间的拓扑关系,需要将引用次数大于1的顶点计算得到的多个误差值进行汇集、排序,选取误差最大值为该顶点的误差值。数据汇聚是对节点误差值的弹性分布式数据集NodeError RDD进行汇集操作,索引构建是对汇集结果进行四叉树划分,构建顶点加权的四叉树空间索引,有助于提高查询检索效率。
数据汇聚与索引构建的具体流程如图3-10所示。在结果数据汇聚阶段,首先使用map ToPair操作将各个节点计算得到的NodeError RDD生成<key,value>形式的Key NodeError RDD,其中key表示节点编号nodeid,pair表示node的误差值;然后,使用reduceBy Key函数进行数据汇集与排序,每一个顶点只保留最大误差值。在索引构建阶段,由于汇集好的NodeError RDD是经过hash分片生成的,因此在生成四叉树索引时要使用geoPartitioner进行重新分区,将处于同一个四叉树子区域的点对象分到同一个分片,得到分区后的NodeError RDD;然后,使用mapPartition函数将每个分片内的点数据计算生成子四叉树,行程四叉树弹性分布式数据集Quad TreeRDD;最后,将子四叉树的根节点合并,生成整个数据集的四叉树Quad TreeRDD。

图3-10 四叉树划分流程
分布式数据处理的伪代码如表3-3、表3-4、表3-5所示,其中,表3-3为主节点的运算代码,表3-4为从节点的运算代码,表3-5为从节点将运算结果进行汇总。数据汇聚结果示例如表3-6所示。
表3-3 主节点运算任务
(https://www.daowen.com)
表3-4 从节点运算任务

表3-5 从节点汇聚任务

表3-6 预处理数据结果示例
