GeoSpark
一. 概要
GeoSpark是一个用来处理大规模空间数据的计算集群,用SRDDs(弹性分布式数据集 Spatial Resilient Disilient Distributed Datasets )扩展了Apache Spark /SparkSQL,来高效导入,处理和 分析 大规模跨集群空间数据。
GeoSpark整体分为三层,上层为空间查询处理层,体层为几何操作库,中间为空间RDD层。
二. 模块及概念
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
来源:CSDN
作者:Freedom3568
链接:https://blog.csdn.net/zhanggqianglovec/article/details/103761737