灵活强大:iObjects Java for Spark模块扩展开发

编者按:超图于2017 GIS 软件技术大会上发布了大数据时代的GIS基础软件——SuperMap GIS 9D。为了让大家能更全面的认识SuperMap GIS 9D在大数据领域的成果和能力,我们策划了SuperMap GIS 9D大数据系列文章,从技术、产品、数据和应用等多个维度进行全面、系统的介绍和阐述。欢迎走进大数据时代GIS技术的饕餮盛宴!

SuperMap iObjects Java for Spark是SuperMap Java组件产品的扩展模块,该模块与大数据分布式计算框架Spark深度结合,在Spark的RDD模型之上扩展出了FeatureRDD模型,支持分布式空间计算。在SuperMap GIS 9D版本中,Spark扩展模块提供了多种以FeatureRDD模型做为输入和输出的数据处理与分析接口,以及对各种类型数据引擎的读取和写入接口。我们将在本文具体介绍FeatureRDD这一重要模型的基本结构和基础功能,以及如何使用Spark模块中的接口来进行扩展开发,以支持多种空间、时间的分布式查询和分析操作。

分布式数据集FeatureRDD

特征要素(Feature)是一个用于描述带有时空信息特征的对象,它包含几何信息、属性值集合、ID值以及时间信息等内容。例如微博的签到点,即是带有签到时间信息和签到位置信息的特征要素。对象的几何信息可以为空,即只有属性值集合,此时表示一个纯属性表。分布式数据集(FeatureRDD)基于Spark的RDD[Feature] 扩展,是数据读取、存储以及分析的通用模型,通过使用FeatureRDD的相关接口,也可以完成空间查询、要素连接、属性统计、缓冲区分析等常用功能。

分布式数据集元信息(Metadata)描述了数据集的属性表结构,坐标系,几何对象类型,时间定义信息等内容。元信息中,属性表结构(Schema)描述了每个字段的名称、类型、默认值等信息。

扩展开发环境部署

iObjects Java for Spark的扩展开发环境可以部署在Windows或者Linux操作系统之上。首先需要部署Spark集群环境和HDFS(可选)分布式文件系统,然后将SuperMap Java产品和Spark扩展包部署到集群的每个节点上,单节点的部署情况如下图所示。SuperMap iServer产品由于已经内置了Spark和Java组件,所以只需要部署一个iServer集群,便可以达到组件产品部署一样的效果。用户也可以使用SuperMap iManager产品实现自动化、智能化的大数据环境一键部署和管理监控。

数据读写

数据读取的本质是将各种外部数据转化为FeatureRDD的过程,Spark扩展模块中提供了丰富的数据类型支持,包括JSON、CSV、UDB、SDX+空间数据库、Elasticsearch以及avro等。相关接口都在模块的io包下,下面以CSV和SDX+为例说明:

CSV数据

读取CSV文件时,需要一个与CSV文件同名的meta文件,用于描述数据的几何对象类型、投影坐标系、属性表结构等信息。CSV支持点、线、面和属性表等要素类型。

SDX+数据源

SDX+是SuperMap空间数据库引擎,能存储海量矢量、栅格数据。Spark模块支持直接读取SDX+的点、线、面和属性表数据集到FeatureRDD中。读取UDB数据时,我们需要使用NFS设置共享目录,保证UDB可以被各个节点访问到。

如果使用PostgreSQL或Oracle数据库,且期望使用分布式读取方式,需要确保所有结点都已经能正常访问数据库。读取 PostgreSQL数据的示例:

使用SDXReader时,我们可以指定要读取的列,设置属性过滤条件,以及进行空间查询和范围查询。例如只读取"column_LID"列:

读取时进行空间查询:

我们也支持将FeatureRDD写出到UDB或SDX+空间数据库引擎中,大量数据写出到数据源中时,推荐使用PostgreSQL或MongoDB等数据库引擎。

数据处理与分析

灵活强大:iObjects Java for Spark模块扩展开发

一般大数据GIS处理流程都包括这几步,读入原始数据,抽样查看,过滤异常及不相关数据,统计分析,输出结果。基于Spark模块的扩展开发可以允许用户自由组合各种接口。下面我们介绍常用的分布式数据集处理和分析接口。

过滤

使用 FeatureRDD 的filter 函数可以进行要素的属性值过滤,比如筛选出第一列字段值为200的要素:

以及构造一个空间矩形,使用空间矩形范围进行过滤:

也可以进行时间维度的过滤:

获取地理和时间范围

可以直接获取数据集的地理范围:

也可以获取数据集的最大最小时间间隔:

裁剪

使用 clip 函数,对 FeatureRDD 进行面对象裁剪:

空间查询

FeatureRDD支持使用单个对象对数据集进行空间查询。

也支持使用另一个要素数据集对该数据集进行空间查询,并且可以选择是否保留查询数据集中各个对象的featureID。

属性汇总

支持多种属性统计类型:

用户可以在 statistics 包中找到所有定义的属性统计类型。使用FeatureRDD的stats接口可以直接进行属性统计。属性统计的结果为一个纯属性记录的数据集:

网格聚合

对于空间上按一定规则排列的网格我们称之为Mesh ,Mesh支持方格形和正六边形两种。例如,我们使用边长为100米的方格网来进行点数聚合统计:

多边形聚合

在 FeatureRDD 中,可以直接使用一个要素数据集对另一个要素数据集进行属性汇总,支持的空间查询类型包括:

其中最常用的应用即处理点与多边形包含关系的点到多边形聚合统计。

提取列

使用 FeatureRDD 提供的 select 函数,可以选择指定的一列或多列属性,构造一个新的 FeatureRDD :

追加列

使用 FeatureRDD 提供的 join 函数,可以将一个 FeatureRDD 中的属性值追加到当前 FeatureRDD 中,在追加时,如果不设置要素连接字段,则会默认使用要素的 featureID 作为连接字段:

应用案例

某省的通信运营商具有大量的(百亿级规模)手机信令数据,数据是csv文本格式,且由于体量巨大,存储在HDFS之上。另有全省的通信基站数据(千万级规模),存储在UDB数据源汇总。希望通过Spark扩展模块统计分析每个基站邻近的信令数目,用于优化基站部署,可以通过以下步骤进行分析:

如上所述,在SuperMap iObjects Java for Spark 9D版本中,我们提供了多种数据来源的读取与写入支持,并在数据读取之后,可以进行各种空间处理和分析。更为重要的是,组件产品的SDK模式可以支持用户根据自身业务需求,进行灵活的功能组织和二次开发,让用户低成本的使用Spark这一优秀的分布式大数据技术引擎进行GIS开发。

本期供稿 基础研发中心 卢浩

本期责编谢林 曾志明

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171215B0M1CW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券