Google bigquery 如何将PCollection传输到普通列表

Google bigquery 如何将PCollection传输到普通列表,google-bigquery,google-cloud-storage,google-cloud-dataflow,Google Bigquery,Google Cloud Storage,Google Cloud Dataflow,在执行Bigquery处理后,我有一个作为管道结果的PCollection,现在我想使用与管道分离的部分数据。如何将PCollection传输到列表,以便迭代并使用内容 我在概念上做错了什么吗?一旦您完成了数据流管道中的数据处理,您可能会希望将数据写入持久性存储,例如云存储(GCS)中的文件、BigQuery中的表等 然后,您可以使用数据流之外的数据,例如,将其读入列表。显然,它需要适合于特定操作的内存。我要做的是创建“侧输出”(side outputs)(),这是您与主流程一起创建的另一个PC

在执行Bigquery处理后,我有一个作为管道结果的PCollection,现在我想使用与管道分离的部分数据。如何将PCollection传输到列表,以便迭代并使用内容


我在概念上做错了什么吗?

一旦您完成了数据流管道中的数据处理,您可能会希望将数据写入持久性存储,例如云存储(GCS)中的文件、BigQuery中的表等


然后,您可以使用数据流之外的数据,例如,将其读入列表。显然,它需要适合于特定操作的内存。

我要做的是创建“侧输出”(side outputs)(),这是您与主流程一起创建的另一个PCollection,因此最终您将有2个PCollection作为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);
PCollectionTuple myTuples=使用上述函数的上一个进程。。。;
PCollection bqCollection=myTuples.get(bqTag);
PCollection filteredCollection=myTuples.get(myFilterTag);