Apache Beam-使用多个键窗口化后的GroupByKey?

时间:2019-05-07 08:24:36

标签: google-cloud-platform google-cloud-dataflow apache-beam

我正在使用Apache Beam Java SDK从Google提供的PubSubToBigQuery template开始构建管道(该管道将在Google Cloud Dataflow中执行)。

我正在使用Windowing聚合数据并保存分组的数据。例如:

1) a_id: 1 b_id: 2 c_id: 3 name: name1 value: 1
2) a_id: 1 b_id: 1 c_id: 3 name: name2 value: 1
3) a_id: 1 b_id: 2 c_id: 3 name: name3 value: 2
4) a_id: 1 b_id: 1 c_id: 3 name: name4 value: 1
5) a_id: 1 b_id: 1 c_id: 3 name: name5 value: 4
6) a_id: 2 b_id: 1 c_id: 3 name: name6 value: 1

我在1分钟的窗口中收到了该数据块,我想按 a_id b_id c_id 对它们进行分组并计数行,所以我希望这是聚合结果:

1) a_id: 1 b_id: 2 c_id: 3 count: 2
2) a_id: 1 b_id: 1 c_id: 3 count: 3
3) a_id: 2 b_id: 1 c_id: 3 count: 1

如何使用GroupByKey转换进行这种分组? (使用多个键)

1 个答案:

答案 0 :(得分:0)

您希望汇总的记录似乎具有3个部分关键字。我正在想象一个包含以下内容的结构:

  • a_id
  • b_id
  • c_id
  • 名称

当您对数据进行汇总时,我们通过将记录转换为键/值对(KV)进行汇总。

如何选择组成键完全取决于您。要执行所需的聚合,似乎我们可以创建一个由a_id,b_id和c_id字段组成的键。考虑使用ParDo或Mapper将记录转换为键为“ [a_id]:[b_id]:[c_id]”(或您自己选择的由所需字段组成的唯一键结构)。