最近接触了github上两个基于spark的项目,现在做一个小结,这两个项目的链接会在下面具体介绍中给出。
SpatialSpark
SpatialSpark是一个基于Spark用来处理空间数据的一个分布式数据处理系统。在系统中,它提供了丰富的空间查询操作,同时为了实现高性能运算,采用了多种不同的空间索引结构。下面简单的介绍下它提供的某些功能。
一. 创建spark上下文
val conf = new SparkConf().setAppName("Test for Spark SpatialRDD").setMaster("local[*]")
val spark = new SparkContext(conf)
二. 从本地读取测试的数据文件,并生成SpatialRDD(项目自定义的一种RDD对象)
val locationRDD=datardd.map{
line=>
val arry=line.split(",")
try {
(Point(arry(0).toFloat, arry(1).toFloat), arry(2))
}catch
{
case e:Exception=>
//println("input format error")
}
}.map
{
case (point:Point,v)=>(point,v)
case ()=>null
case _=>null
}.filter(_!=null)
val indexed = SpatialRDD(locationRDD).cache()
数据文件中部分数据如下,格式:(横坐标,纵坐标,属性值)
24.8597823387,-92.1412089223,1
29.2580133673,-81.478279848,2
28.9985588549,-82.3540992077,3
40.626048454,-86.0555605318,4
36.1591546487,-88.6869851979,5
32.5855413933,-82.3103059884,6
……
三. 空间数据的查询操作
1 区域查询,判断数据点是否在指定的区域内
def testForSJOIN[V] (srdd:SpatialRDD[Point,V], spark:SparkContext) =