樣品JSON JavaRDD
{ 「名」: 「開發」, 「工資」:10000, 「職業」:「ENGG 」, 「地址」: 「諾伊達」} { 「名」: 「KARTHIK」, 「工資」:20000, 「職業」: 「ENGG」, 「地址」: 「諾伊達」}
有用的代碼:
final List<Map<String,String>> jsonData = new ArrayList<>();
DataFrame df = sqlContext.read().json("file:///home/dev/data-json/emp.json");
JavaRDD<String> rdd = df.repartition(1).toJSON().toJavaRDD();
rdd.foreach(new VoidFunction<String>() {
@Override
public void call(String line) {
try {
jsonData.add (new ObjectMapper().readValue(line, Map.class));
System.out.println(Thread.currentThread().getName());
System.out.println("List size: "+jsonData.size());
} catch (IOException e) {
e.printStackTrace();
}
}
});
System.out.println(Thread.currentThread().getName());
System.out.println("List size: "+jsonData.size());
jsonData
最後是空的。
輸出:
Executor task launch worker-1
List size: 1
Executor task launch worker-1
List size: 2
Executor task launch worker-1
List size: 3
.
.
.
Executor task launch worker-1
List size: 100
main
List size: 0
由於列表在開始時似乎是空的,它可能是對象映射器無法解析它得到的行嗎?你能提供一個[mcve]嗎? – Thomas
什麼是'rdd'? – khelwood
也許'System.out.println'在foreach完成任務之前執行(或者甚至開始)? – freedev