Google cloud platform Apache Beam-使用多个键打开窗口后的GroupByKey?

Google cloud platform Apache Beam-使用多个键打开窗口后的GroupByKey?,google-cloud-platform,google-cloud-dataflow,apache-beam,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,我正在使用ApacheBeamJavaSDK构建一个管道,该管道由Google提供(管道将在Google云数据流中执行) 我正在使用窗口来聚合数据和保存分组数据。例如: 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_

我正在使用ApacheBeamJavaSDK构建一个管道,该管道由Google提供(管道将在Google云数据流中执行)

我正在使用窗口来聚合数据和保存分组数据。例如:

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_idb_idc_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

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

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

  • 身份证
  • b_id
  • c_id
  • 名字
  • 价值观
当您对数据执行聚合时,我们通过将记录转换为键/值对(KV)进行聚合


这完全取决于您如何选择组合键。要按照您的意愿执行聚合,我们似乎可以创建一个由a_id、b_id和c_id字段组成的键。考虑使用PARDO或映射器将记录转换为“<代码> [AYID]:[BYID]:[CYID] ”(或者您自己选择的由您所期望的字段组成的唯一密钥结构)。最后,我用谷歌提供的模板解决了我的问题,没有从头开始写新的管道,但是我把这个答案作为“接受”来检查。因为这肯定是解决这类问题的正确方法。