[英]Spark: find max key in a JavaPairRDD
我有一些JavaPairRDD,看起来像JavaPairRDD<Integer, Iterable<String>>
,其中Integer是Iterable字段中单词出现的次数。
我想找到与最大键值关联的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.