如何在给定的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, 22410。例如,键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?的主要内容,如果未能解决你的问题,请参考以下文章

在 flatMapToPair 中访问 HashMap

Java+Spark 实现 flatMapToPair 的lambda函数时遇到的问题及解决方法

Pyspark 在元组列表上设置

如何从 pyspark rdd 或分区中确定原始 s3 输入文件名

spark1.x和2.xIterable和iterator兼容问题

在 RDD 转换上保留 Spark DataFrame 列分区