我是Spark的新手,我正在尝试使用RDD分区开发一种改进的字数算法。我最初的RDD细分为K个分区,并使用mapPartitionToPair计数了每个分区中的单词数。这是我的代码。
我得到的结果是单词,它紧随每个分区中的计数,但是某些单词在一个分区中,因此下一步,我应该从所有分区中收集每个单词并对其计数求和,但是我似乎不知道我应该使用哪种方法。
我是一个初学者,所以我感谢任何提示,谢谢。
JavaPairRDD<String, Long> wordpairs = docsPartitioned.mapPartitionsToPair( (Iterator<String> iter) -> {
ArrayList<String> words= new ArrayList<String>();
String line=null;
while (iter.hasNext())
line=iter.next();
String[] tokens = line.split(" ");
HashMap<String, Long> counts = new HashMap<>();
ArrayList<Tuple2<String, Long>> pairs = new ArrayList<>();
for (String token : tokens) {
counts.put(token, 1L + counts.getOrDefault(token, 0L));
}
for (Map.Entry<String, Long> e : counts.entrySet()) {
pairs.add(new Tuple2<>(e.getKey(), e.getValue()));
}
return pairs.iterator();
});
wordpairs.reduceByKey((x,y)->x+y);