如何从谷歌数据流管道中的多个输入PCollection中生成一个输出PCollection?

时间:2016-06-15 02:35:35

标签: java google-cloud-dataflow dataflow

我正在尝试使用转换器从2个输入生成PCollection<C>(包含C类型的元素):一个PCollection<A>(包含A类型的元素),第二个是{ {1}}。

基本上,变换器会考虑存储在PCollection<C>中的元素,并以PCollection<A>的方式对这些元素进行一些计算,最终它会产生一个新的PCollection与新的输出元件。

那么,有没有办法使用PCollection<C>PCollectionTuple优先于ParDo来生成此方案,只生成一个输出PCollectionTuple,或使用任何其他建议Google Dataflow SDK?

1 个答案:

答案 0 :(得分:2)

有多种方法可以在Dataflow中加入PCollections。对于您的情况,PCollection<C>中的每个元素都需要访问PCollection<A>中的多个元素,您可以使用侧输入。有关详细信息,请参阅View转换。

例如,假设pCollectionA很小:

PCollectionView<List<A>> view = View.asList(pCollectionA);
PCollection<C> output = pCollectionC.apply(ParDo.withSideInputs(view).of(
  new DoFn<C,C>() {
    public void processElement(ProcessContext c) { 
      c.output(...combine c.element() and c.sideInput(view)...);
    }
  });

如果您只需要访问每个元素的pCollectionA部分,您可以使用View.asMultimap代替,这将允许在pCollectionA中进行点查找