我有一些看似JavaPairRDD<Integer, Iterable<String>>
的JavaPairRDD,其中整数是 Iterable 字段中包含的单词的出现次数。
我想找到与最大键值相关联的JavaPairRDD。
JavaRDD max方法的签名如下:
public static T max(java.util.Comparator<T> comp)
但我不知道如何实现它......
答案 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问题
的帮助下撰写