我有一个记录集合,为简单起见,如下(逗号分隔(:
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. 阿帕奇光束组合