我有1000个json文件,我需要对每个文件进行一些转换,然后创建一个合并的输出文件,它可以对值进行重叠操作(例如,它不应该有重复的值)
因此,如果我将文件读作wholeTextFiles
,title,content
对,然后在map
函数中,我会将content
解析为json tree
并执行转换,在哪里以及如何合并输出?
我是否需要对结果RDD进行另一次转换以合并值,这将如何工作?我可以在所有地图块中有一个共享对象(List或Map或RDD(?)),它们将作为转换的一部分进行更新,以便我可以检查那里的重复值吗?
P.S:即使输出创建了部分文件,我仍然希望没有重复。
代码:
//read the files as JavaPairRDD , which gives <filename, content> pairs
String filename = "/sample_jsons";
JavaPairRDD<String,String> distFile = sc.wholeTextFiles(filename);
//then create a JavaRDD from the content.
JavaRDD<String> jsonContent = distFile.map(x -> x._2);
//apply transformations, the map function will return an ArrayList which would
//have property names.
JavaRDD<ArrayList<String>> apm = jsonContent.map(
new Function< String, ArrayList<String> >() {
@Override
public ArrayList<String> call(String arg0) throws Exception {
JsonNode rootNode = mapper.readTree(arg0);
return parseJsonAndFindKey(rootNode, "type", "rootParent");
}
});
因此,通过这种方式,我可以从每个json文件中获取ArrayList
中的所有第一级属性。
现在我需要一个最终ArrayList
,作为所有这些arraylists的联合,删除重复。我怎样才能做到这一点?
答案 0 :(得分:0)
为什么1000个json文件需要1000个RDD?
您是否看到将输入阶段的1000个json文件合并到一个RDD中的任何问题?
如果你将从输入阶段使用一个RDD,那么在这个RDD上执行所有必需的操作应该不难。