如何将PCollection传输到普通列表

时间:2015-10-13 16:21:57

标签: google-bigquery google-cloud-storage google-cloud-dataflow

在进行Bigquery处理后,我有一个PCollection作为管道的结果,现在我想使用与管道分开的那些数据的一部分。如何将PCollection传输到List,以便我可以遍历它并使用内容。

我是否在概念上做错了什么?

2 个答案:

答案 0 :(得分:1)

在Dataflow管道中完成数据处理后,您可能希望将数据写入持久存储,例如云存储(GCS)中的文件,BigQuery中的表格等。

然后,您可以使用Dataflow外部的数据,例如,将其读入List。显然,它需要适合特定行动的记忆。

答案 1 :(得分:1)

我要做的是创建“侧面输出”(https://cloud.google.com/dataflow/model/par-do),这是您与主进程一起创建的另一个PCollection,因此最终您将有两个PCollections作为BQ进程的结果。

只需确保在您的流程函数中创建条件以将元素添加到侧输出集合中。像这样:

public final void processElement(final ProcessContext context) throws Exception {
  context.output(bqProcessResult);
  if (condition) {
    context.sideOutput(myFilterTag, bqProcessResult);
  }
}

该过程的结果不是PCollection而是PCollectionTuple,因此您只需执行以下操作:

PCollectionTuple myTuples = previous process using the function above...;
PCollection<MyType> bqCollection = myTuples.get(bqTag);
PCollection<MyType> filteredCollection = myTuples.get(myFilterTag);