使用Dataflow执行嵌套聚合

时间:2016-01-19 08:53:47

标签: google-cloud-dataflow

我有下面提到的标题数据。其中1个组织拥有n个应用,1个应用拥有n个用户(不同应用中的用户名相同,意味着不同的用户):

org, app, users, spend_time

现在,我需要找到每个用户,每个应用和每个组织的总和平均花费时间。

最好的方法是什么。

P.S。我目前通过制作(org,app,user)的密钥来找到每个用户的平均花费时间,(org,app)的密钥来找到每个应用的平均花费时间。

1 个答案:

答案 0 :(得分:2)

您建议的方法很好。

如果您想对每个数据子集(例如,每个用户)执行任何聚合(例如,求和),您将执行以下操作:

  • 为每个元素分配一个键,以便应该聚合的元素共享相同的键值,而不应聚合在一起的元素不会共享相同的键。
  • 调用每个键Combine转换。

以下是演示按键Combine转换的部分代码段:

PCollection<KV<String, Double>> salesRecords = ...;
PCollection<KV<String, Double>> totalSalesPerPerson =
    salesRecords.apply(Combine.<String, Double>perKey(
        new Sum.SumDoubleFn()));