2.2. datastore-kudu-spark使用说明¶
## datastore-kudu-spark介绍: datastore-kudu-spark.jar包提供一种spark读取kudu-datastore的数据的方式。Datastore-kudu.jar和datastore-kudu-spark都封装在sdk里面。Datastore-kudu-spark核心思想: 传入一个geometry filter字符串,获得对应kudu表的查询计划,将查询计划中的keyRanges列表划分为一个一个hadoop的inputSplits, 每一个inputSplits对应一个map, 在map中,反序列化KuduScanner, 用KuduScanner.scan方法读出datastore里面数据。
平台数据存储在kudu中,如果有进行读取和计算的需要,可以使用该工具包内提供将kudu数据转成SpatialRDD的方式。转成SpatialRDD之后,可以根据自己的具体需求对RDD进行操作。本文档会提供几个转换方式提供参考。
该包内SparkDatastoreReader提供读取datastore数据的接口,用typeName和filter字符串实例化SparkDatastoreReader,传入kudu的master和catalog等相关参数,调用read方法即可返回一个RDD。
该包还提供2个属性可以认为设置分区数,spark.datastore.map.nums可以设置map的个数,由于计算inputSplits个数时,时通过kudu的tablets计算的,真实分区数为nums * tablets个数; spark.datastore.map.nums.enabled设置为false时,不能认为设置分区个数。默认可以人为设置分区。
# 创建一个SpatialRDD
public static void main(String[] args) {
if (args.length != 2) {
System.out.print("SparkDataStoreReader <typeName> <filter>");
System.exit(1);
}
SparkDatastoreReader reader = new SparkDatastoreReader(args[0], args[1]);
Map<String, String> params = new HashMap<>();
params.put("kudu.master", "192.168.20.11:7051");
params.put("kudu.catalog", "catalog");
//创建一个SpatialRDD
SpatialRDD rdd = reader.read(params);
rdd.collect();
}
*
## <font color=green>java调用方式</font>
*
## 将SpatialRDD转成JavaRDD
` java
JavaRDD<SimpleFeature> javaSpatialRDD = SpatialRDD.toJavaRdd(SpatialRDD spatialRDD);
`
<font color=red>说明:下面的java转化方式,都必须建立在先将SpatialRDD转为JavaRDD的基础上</font>
## 将SpatialRDD转成GeoJson
` java
JavaRDD<String> geoJson = SpatialRDD.toGeoJson(JavaRDD<SimpleFeature> javaSpatialRDD);
`
## 将JavaSpatialRDD转成Map
` java
JavaRDD<String> keyValueMap = SpatialRDD.toKeyValueMap(JavaRDD<SimpleFeature> javaSpatialRDD);
`
## 将JavaSpatialRDD转成List
` java
JavaRDD<String> valueList = SpatialRDD.toValueList(JavaRDD<SimpleFeature> javaSpatialRDD);
`
## 将JavaSpatialRDD转成wkt
` java
JavaRDD<String> the_geom_wkt = SpatialRDD.toWKT(JavaRDD<SimpleFeature> javaSpatialRDD);
`
## 将JavaSpatialRDD转成Geometry
` java
JavaRDD<Geometry> geometry = SpatialRDD.toGeometry(JavaRDD<SimpleFeature> javaSpatialRDD);
`