使用数据流执行嵌套聚合
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()));
我有下面提到的 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()));