2012-03-08 3 views
1
recs = load 'a.txt'; 
grp = group recs with each group having 5 records; 

위와 같이해야합니다.
recs에 10 개의 레코드가있는 경우
각 그룹에 각각 5 개의 레코드가 있도록 그룹을 생성해야합니다.돼지 - 주어진 크기의 그룹 만들기

어떻게 만드시겠습니까?

답변

0

확장 가능한 솔루션은 UDF 새로운 백에 기록 축적하고 5 개 요소 빈 봉투 (또는 널)이 때는 아직 5 개 요소가없는 경우 이 백을 출력하도록 할 수있다.

하나의 단점은 각지도의 마지막 그룹에 5 개 미만의 요소가있을 수 있기 때문입니다 (따라서 널로 채우기를 시도하거나 모두를 버리고 다시 그룹화 할 수 있음). 코멘트

recs = load 'a.txt'; 
grp_5 = foreach recs generate GROUPER(*, 5) as group; 
grp = filter grp by not IsEmpty(group); 

편집 : 정기적 가방 속성이 UDF로 좋은 것

은 일반적으로 instantiated 다음의 간부 인()가 각 레코드에 대해 호출되는 맵의 시작 부분입니다. MAX 함수처럼 모든 레코드를 스트리밍하는 것과 같은 것으로 생각하십시오.

+0

그래서 UDF 클래스에서 정적 변수를 사용해야합니까? 아니면 다른 방법이 있습니까? – dharm0us

+0

비 정적 속성을 사용하는 UDF의 수명주기 때문에 안전해야합니다. – Romain