a)从有界源中读取,在数据流中运行时,PCollection的大小可以有多大? b)在处理大数据时,说大约5000万个PCollection数据试图查找另一个大约1000万个PCollection数据的PCollection。能做到吗,Beam / Dataflow的性能如何?在ParDo函数中,假设我们只能传递一个输入并返回一个输出,那么如何基于2个输入数据集执行查找?我试图查看与任何其他ETL工具类似的Dataflow / Beam,在其中可以轻松查找以创建新的PCollection。请提供任何代码段,这可能会有所帮助。
我也看到了侧面输入的功能,但是侧面输入是否可以真正保存那个大数据集,如果那样的话可以完成查找吗?
答案 0 :(得分:1)
您绝对可以使用侧面输入来执行此操作,因为侧面输入可能会很大。
在Java中,您将执行以下操作:
Pipeline pipeline = Pipeline.create(options);
PCollectionView<Map<...>> lookupCollection = pipeline
.apply(new ReadMyLookupCollection())
.apply(View.asMap());
PCollection<..> mainCollection = pipeline
.apply(new ReadMyPCollection())
.apply(
ParDo.of(new JoinPCollsDoFn()).withSideInputs(lookupCollection));
class JoinPCollsDoFn<...> extends DoFn<...> {
@ProcessElement
public void processElement(ProcessContext c) {
Map<...> siMap = c.sideInput(lookupCollection);
String lookupKey = c.element().lookupKey;
AugmentedElement result = c.element().mergeWith(siMap.get(lookupKey))
c.output(result);
}
}
FWIW,这有点伪代码,但这只是您想要做的一小段。如果您想进一步说明,请告诉我。