[英]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.