如何在 JSONArray 上应用平面地图并在 Spark 中转换为 JSONObject?



我正在研究 spark java 模块,在那里我制作了一个地理编码 api(100 条记录的批处理请求(。现在对于每个请求,我将在一行中获得 JSONObject 的 JSONArray,如下所示。

通常会有100个地址,但我只给出了2个地址

Locations        | Batch_Address
------------------------------------------
Address1,Address2  | [ { name:Address1,lat:12.89,lng:23.56} , { name:Address2,lat:12.3,lng:23.4} ]

我需要的结果如下

Address
----------
{ name:Address1,lat:12.89,lng:23.56}
{ name:Address2,lat:12.3,lng:23.4}

如果你的代码处理java8,它有java.util.Spliterator<T>,所以你可以使用它从jsonarray创建列表。

字符串类型

JavaRDD<String> JsonObject = json_Batch.javaRDD().flatMap(f -> {
String res = f.getAs("Batch_Address").toString();

JSONArray jsonArr = new JSONArray(res);

List<String> list = StreamSupport.stream(jsonArr.spliterator(), false)
.map(val ->   val.toString())
.collect(Collectors.toCollection( ArrayList::new ));
return list.iterator();
}); 
JsonObject.foreach(f -> System.out.println(f));

JSONObject 类型


JavaRDD<JSONObject> JsonObject = json_Batch.javaRDD().flatMap(f -> {
String res = f.getAs("Batch_Address").toString();

JSONArray jsonArr = new JSONArray(res);

List<JSONObject> list = StreamSupport.stream(jsonArr.spliterator(), false)
.map(val ->  (JSONObject) val)
.collect(Collectors.toCollection( ArrayList::new ));
return list.iterator();
}); 
JsonObject.foreach(f -> System.out.println(f));

最新更新