如何在给定的rdd上应用flatMapToPair?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在给定的rdd上应用flatMapToPair?相关的知识,希望对你有一定的参考价值。
我有一个名为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, 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;
);
以上是关于如何在给定的rdd上应用flatMapToPair?的主要内容,如果未能解决你的问题,请参考以下文章
Java+Spark 实现 flatMapToPair 的lambda函数时遇到的问题及解决方法
如何从 pyspark rdd 或分区中确定原始 s3 输入文件名