首页 > 解决方案 > 在 Apache Beam 中将嵌套的重复字段组合成数组

问题描述

我有一组记录,为简单起见如下(逗号分隔):

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

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

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

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

标签: apache-beam

解决方案


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

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

参考:
1. Apache Beam Combine.PerKey


推荐阅读