繁体   English   中英

Spark:在JavaPairRDD中找到最大密钥

[英]Spark: find max key in a JavaPairRDD

我有一些JavaPairRDD,看起来像JavaPairRDD<Integer, Iterable<String>> ,其中IntegerIterable字段中单词出现的次数。

我想找到与最大键值关联的JavaPairRDD。

JavaRDD max方法的签名如下:

public static T max(java.util.Comparator<T> comp)

但我不知道如何实现...

使用keys()方法获取最大值,然后过滤原始RDD:

Integer maxKeys = originalRDD.keys().max ((x, y) -> x-y);

JavaPairRDD<Integer, Iterable<String>> withMaxKeys = originalRDD.filter (x -> x._1.equals(maxKeys))

或仅过滤原始的RDD-确保密钥是唯一的!

Tuple2<Integer, Iterable<String>> withMaxKeys = originalRDD.max ((x, y) -> x._1 - y._1);

._1表示元组的第一个元素,在本例中为RDD键

代替lambda表达式,您可以编写ie(在第二种情况下):

public class JavaPairRDDTests {

    public static class TupleComparator implements Comparator<Tuple2<Integer, Iterable<String>>>, Serializable {
        @Override
        public int compare(Tuple2<Integer, Iterable<String>> x, Tuple2<Integer, Iterable<String>> y) {
            return Integer.compare(x._1(), y._1());
        }
    }

    public static void main (String[] args) {
        JavaPairRDD<Integer, Iterable<String>> originalRDD = /* ... */;

        Tuple2<Integer, Iterable<String>> withMaxKeys = originalRDD.max(new TupleComparator());
    }

}

这个问题的帮助下写的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM