转换JavaRDD <list <string>&gt; to JavaPairRDD <string,integer =“”>

时间:2017-06-02 11:00:53

标签: java hadoop apache-spark

我有JavaRDD<List<String>>,我希望它成为JavaPairRDD<String, Integer>,其中String是原始JavaRDD列表中包含的每个元素,而Integer是常量(1)。 有可能做那样的事吗? PS:已经检查了this question,但没有帮助我。

2 个答案:

答案 0 :(得分:1)

请使用flatMapToPair

        JavaRDD<List<String>> rdd = ...;

        JavaPairRDD<String, Integer> flatMapToPair = rdd.flatMapToPair(new PairFlatMapFunction<List<String>, String, Integer>() {

            @Override
            public Iterable<Tuple2<String, Integer>> call(List<String> t) throws Exception {
                List<Tuple2<String, Integer>> result = new ArrayList<>();
                for (String str : t) {
                    result.add(new Tuple2<>(str, 1));
                }
                return result;
            }
        });

答案 1 :(得分:1)

您可以使用:

JavaRDD<List<String>> listRdd = null; //assign
JavaPairRDD<String, Integer> rdd = listRdd.flatMap(list -> list)
     .mapToPair(string -> new Tuple2<String, Integer>(string, 1));