使用数据流执行嵌套聚合

Perform Nested Aggregation using Dataflow

我有下面提到的 header 的数据。其中 1 个组织有 n 个应用,1 个应用有 n 个用户(不同应用中的相同用户名表示不同用户):

org, app, users, spend_time

现在,我需要找到每个用户、每个应用程序和每个组织的总数和平均值 spend_time。

最好的方法是什么。

P.S。我目前通过制作 (org, app, user) 的键来查找每个用户的平均值 spend_time , (org, app) 的键来查找每个应用的平均值 spend_time 来解决这个问题。

你推荐的方法很好。

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

  • 为每个元素分配一个键,这样应该聚合的元素共享相同的键值,而不应该聚合在一起的元素不共享相同的键。
  • 调用 per-key Combine 转换。

这是演示 per-key Combine 转换的部分代码片段:

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