2013-03-28 2 views
0

관계에 새 필드를 만든 다음 순차적으로 증가하는 숫자를 할당하는 방법이 있는지 궁금합니다. 한 예가 있습니다 :연속적으로 증가하는 숫자를 관계에 할당하는 방법

ordered_products = ORDER products BY price ASC; 
ordered_products_with_sequential_id = FOREACH ordered_products GENERATE price, some_sequential_id; 

some_sequential_id는 어떻게 작성합니까? 그게 돼지에서 할 수 있는지 확실하지 않습니다.

답변

1

나는 당신이 자신의 UDF를 작성하여 그 실행을해야한다고 생각합니다. 이를 수행하는 한 가지 방법은 exec 구현에서 UDF의 정적 변수 (AtomicInteger)를 증가시키는 것입니다.

public class IncrEval extends EvalFunc<Long> { 

    final static AtomicLong res = new AtomicLong(0); 

    @Override 
    public Long exec (Tuple tip) throws IOException { 
     if (tip == null || tip.size() == 0) { 
      return null; 
     } 

     res.incrementAndGet(); 
     return res.longValue(); 
    } 
} 

돼지 스크립트 항목 :
b = FOREACH a GENERATE <something>, com.eval.IncrEval() AS ID:long;

+0

이 흥미 롭다. 그러나 전체 릴레이션에 일련 번호를 할당할까요? 번호가 매퍼 내에서만 순차적 인 것처럼 느껴지나요? – kee

+0

그래, 그건 단점이야. 병렬 처리를 1로 설정해야합니다. – jaguarpaw

관련 문제