【问题标题】:Applying multiple aggregations at once in Google Cloud Dataflow在 Google Cloud Dataflow 中一次应用多个聚合
【发布时间】:2015-05-04 10:56:22
【问题描述】:

我有一个键值对的 PCollection,其中的值是 Double。 我需要计算值的总数及其平均值。

我看到有两个转换 - CountMean。但我找不到在 GroupBy 操作中同时应用它们的方法。

看来我的选择是要么实现我自己的 combine 方法来实现计数和平均,要么分别应用 Count 和 Mean,然后将它们加入原始键。

还有第三种方法吗?

谢谢, G

【问题讨论】:

    标签: google-cloud-dataflow


    【解决方案1】:

    我会说正确的方法是编写自己的 DoFn 并在 GroupByKey 转换后使用它:

    static class CountAndMean extends DoFn<KV<String, Iterator<Double>>, String> {
        @Override
        public void processElement(ProcessContext c) {
            long count = 0L;
            double sum = 0.0;
            for(Double v: c.element().getValue()){
               sum += v.doubleValue();
               count += 1L;
            }
            double mean = sum/count;
            String out = c.element().getKey() + "," + String.valueOf(mean) + "," + String.valueOf(count); 
            c.output(out);
       }
    
    PCollection<KV<String, Double>> inCol = ... ;
    PCollection<KV<String, Iterable<Double>>> perKeyCol = inCol.apply(GroupByKey.<String, Double>create());
    PCollection<String> outCol = perKeyCol.apply(ParDo.named("CountAndMean").of(new CountAndMean()));
    

    【讨论】:

    • 但是计数操作不会返回 1(因为现在所有键都是不同的)?
    • Oups,这是真的,这是另一个基于 GroupByKey 的解决方案。
    • 谢谢——我也是这么想的。我希望我可以重用 CountMean 操作..
    猜你喜欢
    • 2016-11-10
    • 2015-08-01
    • 1970-01-01
    • 2018-11-28
    • 2016-05-27
    • 1970-01-01
    • 2016-04-04
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多