我正在使用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转换进行这种分组? (使用多个键)
答案 0 :(得分:0)
您希望汇总的记录似乎具有3个部分关键字。我正在想象一个包含以下内容的结构:
当您对数据进行汇总时,我们通过将记录转换为键/值对(KV)进行汇总。
如何选择组成键完全取决于您。要执行所需的聚合,似乎我们可以创建一个由a_id,b_id和c_id字段组成的键。考虑使用ParDo或Mapper将记录转换为键为“ [a_id]:[b_id]:[c_id]
”(或您自己选择的由所需字段组成的唯一键结构)。