GeoSpark 详细介绍

淺唱寂寞╮ 提交于 2020-01-24 05:01:58

GeoSpark

一. 概要

GeoSpark是一个用来处理大规模空间数据的计算集群,用SRDDs(弹性分布式数据集 Spatial Resilient Disilient Distributed Datasets )扩展了Apache Spark /SparkSQL,来高效导入,处理和 分析 大规模跨集群空间数据。

GeoSpark整体分为三层,上层为空间查询处理层,体层为几何操作库,中间为空间RDD层。

img

二. 模块及概念

2.1 模块

GeoSpark 有四个模块组成,Core ,SQL , Viz 和 Zeppelin 模块。

Spark Core

Core 提供 SpatialRDDS 和 查询操作等能力

Spark SQL

GeoSpark的SQL接口,提供对 SQL/DataFrame的空间处理能力

Spark Viz

Viz主要用于可视化SRDD( Spatial RDD) 和 DataFrame

主要用与转换Spatial RDD/Spatial DataFrame 为常用图片格式. GeoSparkViz 是大规模内存空间可视化系统,支持可视化Spatial RDD 和 Spatial Queries 查询结构。此模块支持生成 瓦片数据。

Zeppelin

GeoSpark插件,可以可视化空间数据,对于小数据 可直接加载到 Zeppelin中进行可视化,对于大规模数据,需要首先通过GeoSparkViz进行数据处理,然后数据可视化

2.2 概念

RDD :弹性分布式数据集

DataFrame: 数据表

SRDD :空间弹性分布式数据集

GeoDataFrame: 空间数据表

Spatial RDD : PointRDD,PolygonRDD,LineStringRDD

var sparkSession = SparkSession.builder()
var myDataFrame = sparkSession.sql("YOUR_SQL")

三. 处理能力

3.1 根据分区写数据能力,类似与对数据进行负载均衡

分布式序列化数据时,支持下面三种写入数据方式:

KDB树: KDB-Tree

四叉树:Quad-Tree

R树 : R-Tree

3.2 索引能力

对分布式数据的建空间索引的能力,支持下面俩种建索引方式:

R树: R-Tree

四叉树: Quad-Tree

3.3 查询能力

对空间数据的查询,执行下面四种查询方式:

区域查询 Range Query,

RangeQuery.SpatialRangeQuery(

区域联接查询 Range Join Query ,

JoinQuery.SpatialJoinQuery(

距离联接查询 Distance Join Query,

最近邻查询 K Nearest Neighbor query

KNNQuery.SpatialKnnQuery(

3.4 SQL 能力

即SpatialDataFrame的能力,可以对查询结构执行以下函数

几何构造能力
ST_GeomFromWKT  /ST_GeomFromWKB /ST_GeomFromGeoJSON
ST_Point/ST_PointFromText/ST_PolygonFromText/ST_LineStringFromText
ST_PolygonFromEnvelope/ST_Circle
空间函数
ST_Distance  /ST_ConvexHull/ST_Envelope/ST_Length/ST_Area/
ST_Centroid/ST_Transform/ST_Intersection/ST_IsValid/ST_PrecisionReduce/
ST_IsSimple/ST_Buffer/ST_AsText/ST_NPoints/ST_GeometryType/ST_Envelope_Aggr  
谓词判断
ST_Contains  /ST_Intersects/ST_Within/ST_Equals/ST_Crosses/ST_Touches/ST_Overlaps
集合函数
ST_Envelope_Aggr/ST_Union_Aggr/

3.5 Viz 能力

Viz 的能力为将RDD/DataFrame 输出为PNG/JPG等格式数据。

图片大小:ST_Pixelize

瓦片名称:ST_TileName

颜色值:ST_Colorize

图片编码: ST_EncodeImage

图片渲染:ST_Render

3.6 数据统计

维诺图:Voronoi diagram,

希尔伯特曲线: Hilbert curve,

统一格网:Uniform grids

散列点: Scatter plot

热力图:heat map

分级统计:choropleth map

3.7 RDD 转换 DataFrame

以下转换有版本要求,下面为 GeoSpeak (1.2.0 +) 的方法

DataFrame to SpatialRDD (1.2.0 +)

var spatialRDD = Adapter.toSpatialRdd(spatialDf, "usacounty")

SpatialRDD to DataFrame

var spatialDf = Adapter.toDf(spatialRDD, sparkSession)

四. 输入能力

GeoSpark 支持文件类型数据有: CSV,TSV,WKT,WKB,GeoJSON,NetCDF/HDF,ShapeFile

4.1 CSV

val pointRDDInputLocation = "/Download/checkin.csv"
val pointRDDOffset = 0 // The point long/lat starts from Column 0
val pointRDDSplitter = FileDataSplitter.CSV
val carryOtherAttributes = true // Carry Column 2 (hotel, gas, bar...)
var objectRDD = new PointRDD(sc, pointRDDInputLocation, pointRDDOffset, pointRDDSplitter, carryOtherAttributes)

4.2 WKT/WKB

val inputLocation = "/Download/checkin.csv"
val wktColumn = 0 // The WKT string starts from Column 0
val allowTopologyInvalidGeometries = true // Optional
val skipSyntaxInvalidGeometries = false // Optional
val spatialRDD = WktReader.readToGeometryRDD(sparkSession.sparkContext, inputLocation, wktColumn, allowTopologyInvalidGeometries, skipSyntaxInvalidGeometries)

4.3 GeoJson

val inputLocation = "/Download/polygon.json"
val allowTopologyInvalidGeometries = true // Optional
val skipSyntaxInvalidGeometries = false // Optional
val spatialRDD = GeoJsonReader.readToGeometryRDD(sparkSession.sparkContext, inputLocation, allowTopologyInvalidGeometries, skipSyntaxInvalidGeometries)

4.4 ShapeFile

val shapefileInputLocation="/Download/myshapefile"
val spatialRDD = ShapefileReader.readToGeometryRDD(sparkSession.sparkContext, shapefileInputLocation)

五. 输出能力

RDD/DataFrame 支持的输出能力不同;RDD数据会根据索引/未索引,也具有不同的输出能力。

5.1 Spatial RDD

索引类型空间RDD和普通的空间RDD可以被持久保存,但是索引空间RDD必须保存为分布式文件。存储平台,HDFS / Amazon S3

5.1.1 空间RDD(未索引)

类型空间RDD(PointRDD,PolygonRDD,LineStringRDD )和普通的空间RDD( SpatialRDD)

可以输出为WTK,GeoJSON

WKT

objectRDD.rawSpatialRDD.saveAsTextFile("hdfs://PATH")

GeoJSON

objectRDD.saveAsGeoJSON("hdfs://PATH")

分布式文件

objectRDD.rawSpatialRDD.saveAsObjectFile("hdfs://PATH")

5.1.2 空间RDD(索引的)

索引空间RDD必须保存为分布式文件

objectRDD.indexedRawRDD.saveAsObjectFile("hdfs://PATH")

5.2 Spatial SQL/DataFrame

Spatial DataFrame 可以保存为 Hive 和 HDFS,也可以转换 geometry为 String,然后保存 DataFrame到任何你向存储的地方(此处为Spark 支持的能力)。

六. 语言支持

6.1 Scala

RDD, SQL, Viz, Zeppelin

6.2 Java

RDD, SQL, Viz

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!