我有PCollection
个项中有KV<String,Integer>
个,我想找到值最大的那对。
例如,如果键值对是
{foo:3,bar:2,baz:7}
那么结果将是一对baz:7
。
Max class中的任何方法似乎都不能完全满足我的要求:
Max.integersPerKey
给出PCollection
个与输入中的每个键关联的最高值的键值对;我只想要一个具有全球最高价值的商品。
Max.integersGlobally
需要PCollection
的整数;它不需要键值对。从KV对映射到仅值然后使用此值将得到最高值,但我也想保留与该值关联的键。
答案 0 :(得分:2)
当您使用Max.of(comparator)
并实现一个比较器来比较KV<String,Integer>
的值时,它应该可以工作。
这样的比较器可以如下所示:
public static class KVComparator implements Comparator<KV<String,Integer>>, Serializable {
@Override
public int compare(KV<String, Integer> o1, KV<String, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
}
当您拥有PCollection<KV<String,Integer>>
p
时,它看起来像这样:
p.apply(Combine.globally(Max.of(new KVComparator())));