我正在尝试使用转换器从2个输入生成PCollection<C>
(包含C类型的元素):一个PCollection<A>
(包含A类型的元素),第二个是{ {1}}。
基本上,变换器会考虑存储在PCollection<C>
中的元素,并以PCollection<A>
的方式对这些元素进行一些计算,最终它会产生一个新的PCollection与新的输出元件。
那么,有没有办法使用PCollection<C>
或PCollectionTuple
优先于ParDo
来生成此方案,只生成一个输出PCollectionTuple
,或使用任何其他建议Google Dataflow SDK?
答案 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中进行点查找