在键值对的 PCollection 中查找具有最大值的键

乔麦芽

我有一个PCollectionKV<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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章