Cloud Dataflow / Beam - поиск PCollection еще один поиск PCollection - PullRequest
0 голосов
/ 04 сентября 2018

а) При чтении из ограниченного источника, насколько большим может быть размер PCollection при работе в потоке данных? б) При работе с большими данными, скажем, около 50 миллионов данных PCollection пытается найти другую коллекцию PC из примерно 10 миллионов данных PCollection. Можно ли это сделать, и насколько хорошо работает Beam / Dataflow? В функции ParDo, учитывая, что мы можем передать только один вход и получить один выход, как можно выполнить поиск на основе 2 входных наборов данных? Я пытаюсь взглянуть на Dataflow / Beam аналогично любому другому инструменту ETL, где можно легко найти новую коллекцию PCollection. Пожалуйста, предоставьте любые фрагменты кода, которые могут помочь.

Я также видел функциональность бокового ввода, но может ли боковой ввод действительно содержать этот большой набор данных, если так можно выполнить поиск?

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете определенно сделать это с боковыми входами, так как боковой ввод может быть сколь угодно большим.

В 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, это немного псевдокодия, но это фрагмент того, что вы хотели бы сделать. Дайте мне знать, если вы хотите получить дополнительные разъяснения.

...