美文网首页
(九)Geospark关于属性字段处理

(九)Geospark关于属性字段处理

作者: Scially | 来源:发表于2019-06-15 11:56 被阅读0次

Geospark关于属性字段处理

Geospark将从shapefile、csv等格式文件以及DataFrame中的读取的字段保存到了GeometryuserData字段中,可以通过调用.getUserData()方法获取,他会返回一个String对象,各个字段以\t连接。

额外补充一点:Geometry属于JTS开源库的一部分,Geospark将JTS集成在了项目中,并且对其做了改动,所以我们在pom.xml中无需在配置。JTS中核心类是Geometry,代表了一个几何图形,存储了这个几何图形的坐标信息,并且支持拓扑运算。

下面我们首先以CSV为例,他每条属性有两个字段(元数据只有一个字段,我在后面又增加了一个字段),我们看看如何读取。

-88.331492,32.324142,hotel,NewYork
-88.175933,32.360763,gas,NewYork
-88.388954,32.357073,bar,NewYork
-88.221102,32.35078,restaurant,NewYork

我们还是仿照第一节的例子,来读取checkin.csv,并且将其转为Geometry

// 初始化Spark
SparkSession spark = SparkSession.builder().
        config("spark.serializer","org.apache.spark.serializer.KryoSerializer").
        config("spark.kryo.registrator", "org.datasyslab.geospark.serde.GeoSparkKryoRegistrator").
        master("local[*]").appName("Learn08").getOrCreate();


// 加载CSV文件
JavaSparkContext sc = new JavaSparkContext(spark.sparkContext());
String pointRDDInputLocation = Learn08.class.getResource("/checkin.csv").toString();
Integer pointRDDOffset = 0; // 地理位置(经纬度)从第0列开始
FileDataSplitter pointRDDSplitter = FileDataSplitter.CSV;
Boolean carryOtherAttributes = true; // 第二列的属性(酒店名),这里我们要加载的字段

PointRDD rdd = new PointRDD(sc, pointRDDInputLocation, pointRDDOffset, pointRDDSplitter, carryOtherAttributes);
rdd.rawSpatialRDD.foreach((point -> {
    String[] attrs = point.getUserData().toString().split("\t");
    System.out.println(StringUtils.join(attrs, "|"));
}));

注意这一行,PointRDD rdd = new PointRDD(sc, pointRDDInputLocation, pointRDDOffset, pointRDDSplitter, carryOtherAttributes);,我们将carryOtherAttributes设置为true,并且调用.split("\t")将字段分隔,并用|重新拼接:

hotel|NewYork
gas|NewYork
restaurant|NewYork
bar|NewYork

对于shp文件也是如此,geospark会将shp文件中的每一个图斑的所有字段全部放在userData中,并用\t连接。大家感兴趣可以试一试,由于目前geospark在读取shp中只支持utf8编码,如果是gbk的话,我们就要处理下了,下一节我们会讲如何来判断shp文件编码以及如何转换。


本节代码可以在https://github.com/scially/GeosparkBook找到(Learn08.java)

相关文章

网友评论

      本文标题:(九)Geospark关于属性字段处理

      本文链接:https://www.haomeiwen.com/subject/kpdcfctx.html