Мне недавно пришлось выполнять каскадную работу. Раньше у меня никогда не было опыта работы с распределенными системами, поэтому у меня возникли проблемы с пониманием того, как это сделать.Каскадная группа Пример
У меня есть конфигурационный файл, который имеет кучу ведер:
Bucket{
bucket_name: "X"
input_path: "s3://..."
key_column: 1
value_column: 2
multivalue: false
default_value:
type_column: int
}
...
В принципе, все, что нужно сделать, это использовать это, чтобы собрать кучу файлов (каждый из них, как стол, TSV, отображающая url ключи к некоторому значению), а затем группу по URL.
Так в основном, это то, как контур выглядит:
A --> |group |
B --> |by |--> output
C --> |url |
мне было интересно, если следующая логика прав: 1) Мне нужно создать кран для каждого из ведра т.е.
Tap inputTap = new GlobHfs(new TextLine(), bucket.getInputPath());
2) Мне нужно создать EACH Pipe из всех труб (эта часть, о которой я не уверен, нужна ли мне каждая труба, какой должен быть мой фильтр/функция?). Прямо сейчас я создал «Каждая труба», которая разбивает строки на вкладки.
RegexSplitGenerator splitter = new RegexSplitGenerator("\t");
Pipe tokenizedPipe = bucket.getBucketName(), new Field("Line"), splitter));
3) Создайте группу по трубе, которая объединяет все эти соединительные трубы вместе. Я точно не знаю, как заставить GroupBy трубу, чтобы выбрать только ключевые столбцы, но техника, я использую прямо сейчас:
Pipe finalPipe = new Groupby("Output Pipe", inputPipes, groupFields);
Так это правильная логика подойти к этой проблеме? Или некоторые из моих шагов являются излишними или неправильными?
Спасибо!