В двух разных случаях мне приходилось переименовывать все поля в канале для объединения (используя Merge
или CoGroup
). Что я сделал недавно:
//These two pipes contain similar values but different Field Names
Pipe papa = new Retain(papa, fieldsFrom);
Pipe pepe = new Retain(pepe, fieldsTo);
//Where fieldsFrom.size() == fieldsTo.size() and the fields positions match
for (int i =0; i < fieldsFrom.size(); i++){
pepe = new Rename(pepe, fieldsFrom.select(new Fields(i)),
fieldsTo.select(new Fields(i)));
}
//this allows me to do this
Pipe retVal = new Merge(papa, pepe);
Очевидно, это довольно хрупко, так как мне нужно обеспечить, чтобы позиции полей в FieldsFrom и FieldsTo оставались постоянными и имели одинаковый размер и т. д.
Есть ли лучший - менее хрупкий способ слияния без прохождения всей описанной выше церемонии?