Spark:在JavaPairRDD中找到最大密钥

时间:2016-12-09 15:39:33

标签: java apache-spark rdd comparator keyvaluepair

我有一些看似JavaPairRDD<Integer, Iterable<String>>的JavaPairRDD,其中整数 Iterable 字段中包含的单词的出现次数。

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

JavaRDD max方法的签名如下:

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

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

1 个答案:

答案 0 :(得分:0)

使用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());
    }

}

this问题

的帮助下撰写