Cloud Dataflow / Beam-PCollection查找另一个PCollection

时间:2018-09-04 14:57:00

标签: google-cloud-dataflow apache-beam dataflow

a)从有界源中读取,在数据流中运行时,PCollection的大小可以有多大? b)在处理大数据时,说大约5000万个PCollection数据试图查找另一个大约1000万个PCollection数据的PCollection。能做到吗,Beam / Dataflow的性能如何?在ParDo函数中,假设我们只能传递一个输入并返回一个输出,那么如何基于2个输入数据集执行查找?我试图查看与任何其他ETL工具类似的Dataflow / Beam,在其中可以轻松查找以创建新的PCollection。请提供任何代码段,这可能会有所帮助。

我也看到了侧面输入的功能,但是侧面输入是否可以真正保存那个大数据集,如果那样的话可以完成查找吗?

1 个答案:

答案 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,这有点伪代码,但这只是您想要做的一小段。如果您想进一步说明,请告诉我。