如何在给定的 rdd 上应用 flatMapToPair?
how to apply flatMapToPair on a given rdd?
我有一个名为 rddA
的 JavaPairRDD<String, List<Tuple2<Integer, Integer>>>
。例如(收集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
包括三个key:187, 224
和10
。例如,键 187
具有 [267, 110, 200]
作为列表值。
您只需要展平元组列表(元组的第二个值)并按元组的第一个元素分组。
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;
});
我有一个名为 rddA
的 JavaPairRDD<String, List<Tuple2<Integer, Integer>>>
。例如(收集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
包括三个key:187, 224
和10
。例如,键 187
具有 [267, 110, 200]
作为列表值。
您只需要展平元组列表(元组的第二个值)并按元组的第一个元素分组。
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;
});