Google cloud platform Apache Beam-使用多个键打开窗口后的GroupByKey?
我正在使用ApacheBeamJavaSDK构建一个管道,该管道由Google提供(管道将在Google云数据流中执行) 我正在使用窗口来聚合数据和保存分组数据。例如: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_
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
如何使用transform进行这种分组?(使用多个键)您希望聚合的记录似乎有3个部分键。我正在想象一个包含以下内容的结构:
- 身份证
- b_id
- c_id
- 名字
- 价值观
这完全取决于您如何选择组合键。要按照您的意愿执行聚合,我们似乎可以创建一个由a_id、b_id和c_id字段组成的键。考虑使用PARDO或映射器将记录转换为“<代码> [AYID]:[BYID]:[CYID] ”(或者您自己选择的由您所期望的字段组成的唯一密钥结构)。最后,我用谷歌提供的模板解决了我的问题,没有从头开始写新的管道,但是我把这个答案作为“接受”来检查。因为这肯定是解决这类问题的正确方法。