2014-09-11 7 views
1

돼지와 함께 그룹화 문제에 대한 해결책을 찾기 위해 노력하고 있습니다. 현재 나는 다음과 같은 데이터 집합을 가지고 있습니다.Apache Pig Quantile 그룹화

Group | Height | Weight 
    A | 96.5 | 110.2 
    B | 88.2 | 122.5 
    A | 94.1 | 100.8 
    B | 84.1 | 115.6 

I는 높이 가변의 분위수를 (25, 50 ... 에칭) 계산하기 DataFu 라이브러리로부터 StreamingQuantile 방법을 사용하고있다. 현재 작동하지만 각 그룹 + AVG 가중치도 계산해야합니다. 이렇게 그것은 이와 같이 보일 것입니다;

A | Quantile1 | 88.5 (height) | 134.4 (avg weight) 
A | Quantile2 | 125.3 (height) | 156.2 (avg weight) 
etc..... 
B | Quantile4 | 144.3 (height) | 134.2 (avg weight) 

참고로, 여기에는 quantiles 계산을위한 간단한 돼지가 있습니다.

REGISTER /usr/lib/datafu-1.2.0.jar; 
define Quantile datafu.pig.stats.StreamingQuantile('0.0','0.25','0.5','0.75','1.0'); 
A = load 'mydata'; 
Group_A = GROUP A BY $0; 
Quant = FOREACH GROUP_A GENERATE group,Quantile(A.$1); 

어쨌든 나는 각 분위수 및 그룹에 대해 평균 $ 2를 계산할 수 있습니까?

답변

0

필자는 혼동을 피하기 위해 열 이름을 지었다.

REGISTER /usr/lib/datafu-1.2.0.jar; 
define Quantile datafu.pig.stats.StreamingQuantile('0.0','0.25','0.5','0.75','1.0'); 
A = load 'mydata' using PigStorage('|') as (grouping:chararray, height:double, weight:double); 
Group_A = GROUP A BY grouping; 
Quant = FOREACH GROUP_A GENERATE group, Quantile(A.height) as q; 
joined = join Quant by group, A by grouping; 
grouped = group joined by (grouping, q) 
average = foreach grouped generate group, AVG(joined.weight);