Поток данных CoGroupByKey очень медленный - более 10000 элементов на ключ - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть два PCollection<KV<String, TableRow>> у одного ~ 7 миллионов строк, а у другого ~ 1 миллион строк.

Я хочу применить левое внешнее соединение между этими двумя PCollections и в случае успешного соединенияпоместите все данные справа TableRow влево TableRow и верните результаты.

Я попытался использовать CoGroupByKey в Apache Beam SDK 2.10.0 для Java, и здесь я получаю так много горячих клавиш, поэтому мой результат выборки после CoGrupByKeyWaring становится медленнее «Больше 10000 элементов на ключ, нужно повторить».Я также пробовал службу в произвольном режиме, но не помогаю.

PCollection<TableRow> finalResultCollection =
coGbkResultCollection.apply(ParDo.of(
  new DoFn<KV<K, CoGbkResult>, TableROw>() {
    @Override
    public void processElement(ProcessContext c) {
      KV<K, CoGbkResult> e = c.element();
      // Get all collection 1 values
      Iterable<TableRow> pt1Vals = e.getValue().getAll(t1);
      Iterable<TableRow> pt2Vals = e.getValue().getAll(t2);
      for (TableRow tr : pt1Vals)
      {
        TableRow out = tr.clone();
        if(pt2Vals.iterator().hasNext())
        {
            for (TableRow tr1 : pt2Vals)
            {
                out.putAll(tr1);
                c.output(out);
            }
        }
        else
        {
            c.output(out);
        }

      }
    }
  }));

Как выполнить такие соединения в потоке данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...