2013-04-11 4 views
0

두 번에 걸쳐 파이프의 모든 필드의 이름을 바꿔야했습니다 (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가 일정하게 유지 필드 위치를 확인해야하기 때문에 매우 취약하고 그들이

이 더 나은 있는가 등 같은 크기의 것을 - 위의 모든 행사를 거치지 않고 병합하기가 덜 허약 한 방법?

당신은 이름 바꾸기의 능력을 활용하여 어떤 의식을 제거 할 수

답변

2

는 다음과 같이 필드에 /에서 정렬 처리하는 방법 :

pepe = new Rename(pepe, fieldsFrom, fieldsTo); 

을하지만 이것은 단지 루프의 제거; 예, fieldsFrom 및 fieldsTo가 동일한 크기이고 이름이 올바르게 표시되도록 정렬해야합니다.

cascading.jruby는 /에서 필드로 정렬하지 않고 매핑을 허용하는 function에 이름 바꾸기를 사용하여이 문제를 해결합니다.

Merge가 동일한 필드를 선언하기 위해 들어오는 파이프를 요구하는 경우도 있지만 CoGroup은 declaredFields를 제공하여 출력에 이름 충돌이 발생하지 않도록해야합니다 (모든 필드가 전파되고 모든 입력에서 키를 그룹화하는 경우조차도)).

관련 문제