Geospark将从shapefile、csv等格式文件以及DataFrame中的读取的字段保存到了Geometry
的userData
字段中,可以通过调用.getUserData()
方法获取,他会返回一个String对象,各个字段以\t
连接。
Geospark关于属性字段处理
Geospark将从shapefile、csv等格式文件以及DataFrame中的读取的字段保存到了Geometry
的userData
字段中,可以通过调用.getUserData()
方法获取,他会返回一个String对象,各个字段以\t
连接。
额外补充一点:Geometry属于JTS
开源库的一部分,Geospark将JTS
集成在了项目中,并且对其做了改动,所以我们在pom.xml中无需在配置。JTS中核心类是Geometry
,代表了一个几何图形,存储了这个几何图形的坐标信息,并且支持拓扑运算。
下面我们首先以CSV为例,他每条属性有两个字段(元数据只有一个字段,我在后面又增加了一个字段),我们看看如何读取。
1 | -88.331492,32.324142,hotel,NewYork |
我们还是仿照第一节的例子,来读取checkin.csv,并且将其转为Geometry
1 | // 初始化Spark |
注意这一行,PointRDD rdd = new PointRDD(sc, pointRDDInputLocation, pointRDDOffset, pointRDDSplitter, carryOtherAttributes);
,我们将carryOtherAttributes
设置为true,并且调用.split("\t")
将字段分隔,并用|
重新拼接:
1 | hotel|NewYork |
对于shp文件也是如此,geospark会将shp文件中的每一个图斑的所有字段全部放在userData
中,并用\t
连接。大家感兴趣可以试一试,由于目前geospark在读取shp中只支持utf8编码,如果是gbk的话,我们就要处理下了,下一节我们会讲如何来判断shp文件编码以及如何转换。
代码位置说明
本节代码可以在https://github.com/scially/GeosparkBook/blob/geospark/src/main/java/cn/dev/Learn08.java找到(Learn08.java)