-3

我有一个JavaPairRDD<String, List<Tuple2<Integer, Integer>>>名为rddA. 例如(收集后rddA[(word1,[(187,267), (224,311), (187,110)]), (word2,[(187,200), (10,90)])]:. 因此,例如,word1是键和值是[(187,267), (224,311), (187,110)])]

我如何定义相应JavaPairRDD<Integer, List<Integer>>的以获得以下输出:

[(187, [267, 110, 200]), (224,[311]), (10,[90])]

因此,获得的JavaPairRDD包括三个键:187, 22410。例如,键187具有[267, 110, 200]列表值。

4

1 回答 1

1

您只需要展平元组列表(元组的第二个值)并按元组的第一个元素分组。

JavaPairRDD<Integer, List<Integer>> result = rddA
                .flatMapValues(x -> x) // flattening the list
                .mapToPair(x -> x._2) // getting rid of the first key
                .groupByKey()
                .mapValues(x -> { // turning the iterable into a list
                    List<Integer> list = new ArrayList<>();
                    x.forEach(list::add);
                    return list;
                });
于 2020-02-04T16:49:10.083 回答