Google cloud dataflow 使用数据流执行嵌套聚合

Google cloud dataflow 使用数据流执行嵌套聚合,google-cloud-dataflow,Google Cloud Dataflow,我有下面提到的标题数据。其中1个组织有n应用程序,1个应用程序有n用户(不同应用程序中相同的用户名表示不同的用户): 现在,我需要找到每个用户、每个应用程序和每个组织的总花费时间和平均花费时间 最好的方法是什么 另外,我目前通过(组织、应用、用户)键查找每个用户的平均花费时间,以及(组织、应用)键查找每个应用的平均花费时间来解决这个问题。您建议的方法是一个很好的方法 如果要对每个数据子集(例如,每个用户)执行任何聚合(例如,求和),请执行以下操作: 为每个元素分配一个键,以便应该聚合的元素共享

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

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

最好的方法是什么


另外,我目前通过(组织、应用、用户)键查找每个用户的平均花费时间,以及(组织、应用)键查找每个应用的平均花费时间来解决这个问题。

您建议的方法是一个很好的方法

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

  • 为每个元素分配一个键,以便应该聚合的元素共享相同的键值,而不应该聚合在一起的元素不共享相同的键
  • 调用每个键的组合变换
下面是一个部分代码片段,演示了每键
Combine
transform:

PCollection<KV<String, Double>> salesRecords = ...;
PCollection<KV<String, Double>> totalSalesPerPerson =
    salesRecords.apply(Combine.<String, Double>perKey(
        new Sum.SumDoubleFn()));
p收集销售记录=。。。; PCollection TotalSalesperson= salesRecords.apply(Combine.perKey( 新Sum.sumtoolbfn());
您建议的方法很好

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

  • 为每个元素分配一个键,以便应该聚合的元素共享相同的键值,而不应该聚合在一起的元素不共享相同的键
  • 调用每个键的组合变换
下面是一个部分代码片段,演示了每键
Combine
transform:

PCollection<KV<String, Double>> salesRecords = ...;
PCollection<KV<String, Double>> totalSalesPerPerson =
    salesRecords.apply(Combine.<String, Double>perKey(
        new Sum.SumDoubleFn()));
p收集销售记录=。。。; PCollection TotalSalesperson= salesRecords.apply(Combine.perKey( 新Sum.sumtoolbfn());
是否可以将多个字段组合作为密钥聚合操作中的密钥?目前,我为加入(组织、应用、用户)实现了DoFn,以生成单个键,然后执行聚合和分割结果。我不确定你到底在问什么。也许您需要执行一个
组合
来计算您感兴趣的所有三个聚合。如果是这样,您必须编写自己的自定义
CombineFn
。累加器类似于:
{org count,org sum,Map app count,Map app sum,…}
。这假设累加器适合内存,并且可能具有不同的性能特征——在某些情况下性能更好,在另一些情况下性能更差。如果您想了解更多详细信息,请将此问题拆分为一个单独的问题。是否可以将多个字段组合作为密钥聚合操作中的密钥?目前,我为加入(组织、应用、用户)实现了DoFn,以生成单个键,然后执行聚合和分割结果。我不确定你到底在问什么。也许您需要执行一个
组合
来计算您感兴趣的所有三个聚合。如果是这样,您必须编写自己的自定义
CombineFn
。累加器类似于:
{org count,org sum,Map app count,Map app sum,…}
。这假设累加器适合内存,并且可能具有不同的性能特征——在某些情况下性能更好,在另一些情况下性能更差。如果您想了解更多详细信息,请将此问题分成一个单独的问题。