我已经读过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转换实现此目的?