我有一个PCollection
的KV<String,Integer>
项目,我想找到一对,其中的值是最大的。
例如,如果键值对是,{foo:3,bar:2,baz:7}
那么结果将是单个对baz:7
。
Max 类中的任何方法似乎都不能完全满足我的要求:
Max.integersPerKey
给出PCollection
与输入中每个键关联的最高值的键值对;我只想要一个具有全球最高价值的项目。
Max.integersGlobally
需要一个PCollection
整数;它不需要键值对。从 KV 对映射到仅值然后使用它会给出最高值,但我也想保留与该值关联的键。
当您使用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())));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句