从PCollection <tablerow>转换为PCollection <kv <k,v>&gt;

时间:2016-12-20 13:42:44

标签: google-cloud-dataflow

我正在尝试从BigQuery中的2个表中提取数据,然后通过CoGroupByKey加入它。 虽然BigQuery的输出为PCollection<TableRow>,但CoGroupByKey需要PCollection<KV<K,V>>。 如何从PCollection<TableRow>转换为PCollection<KV<K,V>>

1 个答案:

答案 0 :(得分:3)

CoGroupByKey需要知道CoGroup的哪个键 - K中的KV<K, V>V是与此键相关联的值在这个集合中。对每个密钥进行共同分组的结果将为每个密钥提供每个集合中具有此密钥的所有值。

因此,您需要将PCollection<TableRow>转换为PCollection<KV<YourKey, TableRow>>,其中YourKey是您要加入它们的键的类型,例如在您的情况下,它可能是String,或Integer,或其他。

进行转换的最佳转换可能是WithKeys。例如。这是一个代码示例,将PCollection<TableRow>转换为由PCollection<KV<String, TableRow>>类型的假设userId字段键入的String

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