如何减少RDD分区的元素

时间:2019-04-07 10:43:35

标签: rdd partitioning word-count java-pair-rdd

我是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);

0 个答案:

没有答案