Google cloud dataflow 如何在Google云数据流中使用Combine.perKey代替GroupByKey?

Google cloud dataflow 如何在Google云数据流中使用Combine.perKey代替GroupByKey?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我已经读到,Combine在按键分组PCollection时更有效,因为它可以生成多个worker,并且可以更好地并行化。然而,我找不到一个解决方案,让我使用CombineByKey达到与GroupByKey相同的效果。我在使用GroupByKey时一直出现OOM错误 EG:考虑我有一行包含两个字段CujIExID和SeStudioID。我想用CuCIExId对所有行进行分组。所需的输出应该是一个KV,其中k是组的字段,V是成组值的集合。类似这样的{cookie\u id=123,sessio

我已经读到,Combine在按键分组PCollection时更有效,因为它可以生成多个worker,并且可以更好地并行化。然而,我找不到一个解决方案,让我使用CombineByKey达到与GroupByKey相同的效果。我在使用GroupByKey时一直出现OOM错误

EG:考虑我有一行包含两个字段CujIExID和SeStudioID。我想用CuCIExId对所有行进行分组。所需的输出应该是一个KV,其中k是组的字段,V是成组值的集合。类似这样的

{cookie\u id=123,session\u id=[123242234234]}

使用GroupByKey转换的示例代码:

PCollection<KV<String, TableRow>> KeyedRows = RowsWithGroupKey
                  .apply(WithKeys.of(new SerializableFunction<TableRow, String>() {
                @Override
                public String apply(TableRow row) {
                  return (String)row.get("cookie_id");
                }
              }));

            PCollection<KV<String, Iterable<TableRow>>> GroupedRows = KeyedRows
            .apply(GroupByKey.<String, TableRow>create());
            return GroupedRows;
PCollection KeyedRows=RowsWithGroupKey
.apply(带键)of(新的SerializableFunction(){
@凌驾
公共字符串应用(TableRow行){
return(String)row.get(“cookie_id”);
}
}));
PCollection GroupedRows=KeyedRows
.apply(GroupByKey.create());
返回GroupedRows;

如何使用组合变换实现这一点?

Combine perKey执行GroupByKey,然后合并每个相同键上的值。此处记录了使用方法: