将嵌套的重复字段组合成Apache Beam中的数组



我有一个记录集合,为简单起见,如下(逗号分隔(:

A1, B1, C1 
A1, B1, C1'
A1, B2, C2

当我通过 Beam 作为 PCollection 传递时,我使用 ParDo 将每个映射到一个对象中。 现在我想将它们合并成

A1: {
B1: [C1, C1'],
B2: C2
}

对于键值对,我可以使用 GroupByKey,但如果结构非常嵌套,每个级别都可以有重复字段怎么办? 是否有任何转换来组合重复字段?

您可以天真地连续应用GroupByKey变换。首先按B分组,然后按A分组。但是,这是非常低效的,因为在每个GroupByKey步骤中,所有键值对都必须保留在内存中。

Combine.PerKey变换类似于GroupByKey,但它还允许您指定一个累加器类,其中包含用于组合值的自定义逻辑。这些值可以是任何类型的,例如,重复字段或极其嵌套的对象。

参考资料:
1. 阿帕奇光束组合

最新更新