3.3.4 面向组合对象的分布式优化
前三节以线对象为例,介绍了使用Spark分布式框架进行数据分发、顶点层次结构构建和索引构建的具体过程。在一些数据集中(如OpenStreet Map),线对象的顶点个数往往有上限,不能出现过大的线对象,而组合对象的顶点个数没有限制,因此多采用组合对象存储顶点数量很大的线状要素。在分布式数据处理过程中,在处理过大的组合对象时需要耗费较多的处理时间,导致其他对象的处理进程的等待,从而造成集群资源的浪费。因此,需要对数据处理过程中组合对象的计算进行优化,提高计算效率。
图3-11为分布式处理优化流程。首先,使用map操作将StringRDD转换为组合对象的分布式弹性数据集RelationRDD;其次,对组合对象的分布式弹性数据集执行flatmap操作,将过大的组合对象执行B-DP算法,将较大的组合对象分割为若干个大小几乎相同的组合对象,并将正在执行的B-DP算法的分割点生成有序二叉树分布式弹性数据集SortBinary TreeRDD;同时,分割好的组合对象按照原B-DP算法完成误差值计算,生成有序二叉树分布式弹性数据集SortBinary TreeRDD;最后,将其与分割时生成的SortBinary TreeRDD合并,生成汇总后的NodeError RDD。(https://www.daowen.com)

图3-11 分布式处理优化流程图