如何在Google Cloud Dataflow中使用Combine.perKey而不是GroupByKey?

时间:2018-06-07 10:06:36

标签: google-cloud-dataflow apache-beam

我已经读过Combine在按键分组PCollection方面效率更高,因为它可以产生多个worker,并且可以更好地并行化。但是,我找不到一个解决方案,它允许我使用CombineByKey与GroupByKey具有相同的效果。我在使用GroupByKey时遇到了OOM错误。

例如:考虑我有一行包含两个字段cookie_id和session_id。我想通过cookie_id对所有行进行分组。所需的输出应为KV,其中K是要分组的字段,V是分组值的集合。像这样{cookie_id=123, session_ids=[123,242,234,234]}

使用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;

如何使用Combine转换实现此目的?

0 个答案:

没有答案