GeoFlink中一些流的解析

DataStream geoJSONStream  = env.addSource(new FlinkKafkaConsumer<>("kafka", new JSONKeyValueDeserializationSchema(false), kafkaProperties));
DataStream<Point> spatialPointStream = Deserialization.TrajectoryStream(geoJSONStream, inputFormat, inputDateFormat, inputDelimiter1, csvTsvSchemaAttr1, "timestamp", "oID", uGrid);
DataStream<Point> rNeighbors = new PointPointRangeQuery(realtimeConf, uGrid).run(spatialPointStream, qPointSet, radius);

上面是GeoFlink中示例代码的一部分内容

其中第一行是获取一个流,这个流是从kafka获取的,这个流需要是GeoJSON、WKT或者CSV才能够转换成为点流

第二行是一个点流,他需要将第一个流输入进去,通过一些参数对数据进行解析,将第一个流里面的数据变成点流。如果是csv的话需要通过设置csvTsvSchemaAttr,使其x,y能够与数组中的位置对应,才能够成功完成点的转换。

String strOId = strArrayList.get(csvTsvSchemaAttr.get(0));
long time = Long.valueOf(strArrayList.get(csvTsvSchemaAttr.get(1)));
double x = Double.valueOf(strArrayList.get(csvTsvSchemaAttr.get(2)));
double y = Double.valueOf(strArrayList.get(csvTsvSchemaAttr.get(3)));;

举个例子,上面就是GeoFlink提供的将流转换成Point流的方法,如果你输入的是一个csv格式的数据如:ObjID: null, 114.23929438, 22.62298578, 0005200024, 0, 1688459620899

那么你的csvTsvSchemaAttr就需要是以下的数组才能够正确的转换该流

List<Integer> csvTsvSchemaAttr = Arrays.asList(0,5,1,2);

其中,第一个是属性的位置,第二个是时间戳的位置,第三个是经度的位置,第四个是纬度的位置

完成了点流转换后,就可以通过GeoFlink提供的一些方法对地理流数据进行处理,而第三行的代码就是这样子的

将查询配置(流批)、索引格网、点流、被查询点集、查询半径输入后,返回一个查询结果的流回来

最终我们可以将它通过sink到我们需要的地方去

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值