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 .. code:: public static void main(String[] args) { if (args.length != 2) { System.out.print("SparkDataStoreReader "); System.exit(1); } SparkDatastoreReader reader = new SparkDatastoreReader(args[0], args[1]); Map 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(); } *** ## java调用方式 *** ## 将SpatialRDD转成JavaRDD ``` java JavaRDD javaSpatialRDD = SpatialRDD.toJavaRdd(SpatialRDD spatialRDD); ``` 说明:下面的java转化方式,都必须建立在先将SpatialRDD转为JavaRDD的基础上 ## 将SpatialRDD转成GeoJson ``` java JavaRDD geoJson = SpatialRDD.toGeoJson(JavaRDD javaSpatialRDD); ``` ## 将JavaSpatialRDD转成Map ``` java JavaRDD keyValueMap = SpatialRDD.toKeyValueMap(JavaRDD javaSpatialRDD); ``` ## 将JavaSpatialRDD转成List ``` java JavaRDD valueList = SpatialRDD.toValueList(JavaRDD javaSpatialRDD); ``` ## 将JavaSpatialRDD转成wkt ``` java JavaRDD the_geom_wkt = SpatialRDD.toWKT(JavaRDD javaSpatialRDD); ``` ## 将JavaSpatialRDD转成Geometry ``` java JavaRDD geometry = SpatialRDD.toGeometry(JavaRDD javaSpatialRDD); ```