在Google Cloud Dataflow中一次应用多个聚合

时间:2015-05-04 10:56:22

标签: google-cloud-dataflow

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

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

看起来我的选择是要么实现我自己的同时实现计数和平均的组合方法,要么分别应用Count和Mean,然后将它们连接到原始密钥上。

有第三种方法吗?

谢谢, ģ

1 个答案:

答案 0 :(得分:0)

我想说正确的方法是编写自己的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()));