【发布时间】:2015-12-07 21:33:05
【问题描述】:
我想从 Tuple2 对象的 RDD 中提取前 k 个值并将它们写入文件。 我一直在尝试的方法是使用 top 函数并将其传递给 Comparator 对象。这将返回一个 Tuple2 对象列表。
现在我可以在单个节点上合并此列表并遍历此列表并使用 FileWriter 将值打印到文件中。 但这将导致一个文件。而且我希望每个 reducer 有几个文件。
有什么方法可以在 List 而不是 RDD 上使用 saveAsTextFile? 我正在使用带有 Java 的 Spark 1.5.1。
Comparator<Tuple2<String, Double>> tc = new TupleComparator();
List<Tuple2<String,Double>> output = ranks.coalesce(1,true).top(topK,tc);
/* for (Tuple2<String,Double> tuple : output){
System.out.println(tuple._1() + " has rank: " + tuple._2() + ".");
}*/
BufferedWriter writer = new BufferedWriter(new FileWriter(args[2],false));
int i=1;
for(Tuple2<String,Double> tuple: output) {
writer.write(i + " " + tuple._1 + " " + tuple._2);
writer.newLine();
i++;
}
writer.close();
【问题讨论】:
标签: java apache-spark rdd