Apache Beam - 使用多个键进行窗口化后的 GroupByKey?
Apache Beam - GroupByKey after Windowing using multiple keys?
我正在使用 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 分钟内收到此数据块 Window,我想按 a_id、[= 对它们进行分组29=] 和 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 转换来进行这种分组? (有多个键)
您希望聚合的记录似乎有 3 个部分键。我正在想象一个包含以下内容的结构:
- a_id
- b_id
- c_id
- 名字
- 价值
当您对数据执行聚合时,我们通过将记录转换为 Key/Value 对 (KV) 来进行聚合。
这完全取决于您选择如何编写密钥。要按照您的意愿执行聚合,我们似乎可以创建一个由 a_id、b_id 和 c_id 字段组成的键。考虑使用 ParDo 或 Mapper 将您的记录转换为具有“[a_id]:[b_id]:[c_id]
”的键(或您自己选择的由所需字段组成的唯一键结构)。
我正在使用 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 分钟内收到此数据块 Window,我想按 a_id、[= 对它们进行分组29=] 和 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 转换来进行这种分组? (有多个键)
您希望聚合的记录似乎有 3 个部分键。我正在想象一个包含以下内容的结构:
- a_id
- b_id
- c_id
- 名字
- 价值
当您对数据执行聚合时,我们通过将记录转换为 Key/Value 对 (KV) 来进行聚合。
这完全取决于您选择如何编写密钥。要按照您的意愿执行聚合,我们似乎可以创建一个由 a_id、b_id 和 c_id 字段组成的键。考虑使用 ParDo 或 Mapper 将您的记录转换为具有“[a_id]:[b_id]:[c_id]
”的键(或您自己选择的由所需字段组成的唯一键结构)。