У меня есть два 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);
}
}
}
}));
Как выполнить такие соединения в потоке данных?