【问题标题】:count after groupby in Google Dataflow在 Google Dataflow 中按 groupby 计算
【发布时间】:2017-12-04 16:51:02
【问题描述】:

我的 Google 云存储中有以下内容

Advertiser | Event
__________________
100 | Click

101 | Impression

100 | Impression

100 | Impression

101 | Impression

我的管道输出应该是这样的

Advertiser | Count

100 | 3

101 | 2

首先我使用了groupByKey,输出是这样的

100 Click, Impression, Impression

101 Impression, Impression

如何从这里开始?

【问题讨论】:

  • 请包含您目前拥有的代码的相关 sn-p。

标签: google-cloud-dataflow apache-beam


【解决方案1】:

您可能想要使用 combine 函数而不是 GroupByKey,它是一个组合,可以在分组前后进行优化。您的管道可能如下所示:

Python

collection_contents = [(100, 'Click'), 
                       (101, 'Impression'), 
                       (100, 'Impression'), 
                       (100, 'Impression'), 
                       (101, 'Impression']

input_collection = pipeline | beam.Create(collection_contents)

counts = input_collection | Count.PerKey()

这应该输出一个具有您正在寻找的形状的集合。 Count 系列转换在 apache_beam.transforms.combiners.combine.Count 模块中可用。

Java

org.apache.beam.sdk.transforms 包中的 Java 存在相同的转换:

PCollection<KV<Integer, Integer>> resultColl = inputColl.apply(Count.perKey())

【讨论】:

    【解决方案2】:

    此计数模式已在 Apache Beam 的“字数统计”示例中进行了描述。

    Github apache beam sample: wordcount.py 查找示例。计数从第 95 行开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多