2017-11-04 10 views
0

나는 하둡과 돼지에 초보자이다. 질문에 따라 아래의 스크립트까지 드릴 다운 할 수 있었지만, 나는 어떻게 사람의 급여를 자신의 평균 급여와 비교할 수 있을까? 다음은 각 부서의 평균 급여를 얻기 위해 작성된 스크립트입니다급여가 그의 부서의 평균보다 큰 종업원의 이름과 부서를 얻는 방법은 무엇입니까?

A = LOAD 'Assignment_1_Input.log' USING PigStorage('\t') as (id:int,name:chararray,age:int,salary:int,deptid:int); 
B = GROUP A by deptid; 
STORE B INTO 'Assign1GrpByNew'; 
C = FOREACH B GENERATE group as grpId,AVG(A.salary) as grpAvgSal; 
DUMP C; 

입력 파일 :

ramya 1 
raj 2 
ravi 2 

이 나를 도와

15878 mohan 24  8000 1 
19173 ramya 27  10000 1 
9527 krishna 35  40000 2 
9528 raj  36  60000 2 
16884 ravi 50  70000 2 

예상 출력, 감사

답변

0

JOIN A와 C by deptid, grpId 및 FILTER 여기서 salary> grpAvgSal

A = LOAD 'Assignment_1_Input.log' USING PigStorage('\t') as (id:int,name:chararray,age:int,salary:int,deptid:int); 
B = GROUP A by deptid; 
STORE B INTO 'Assign1GrpByNew'; 
C = FOREACH B GENERATE group as grpId,AVG(A.salary) as grpAvgSal; 

D = JOIN A BY deptid,C BY grpId; 
E = FILTER D BY (A::salary > C::grpAvgSal); 
DUMP E; 
0

GROUP BY dept_id 그리고 각 직원 레코드에 대한 평균 급여를 계산하고 급여가 평균보다 큰 직원을 선택하십시오.

발췌문 :

inp_data = LOAD 'Assignment_1_Input.log' USING PigStorage('\t') as (id:int,name:chararray,age:int,salary:int,deptid:int); 
inp_data_fmt = FOREACH(GROUP inp_data BY deptid) GENERATE FLATTEN(inp_data), AVG(inp_data.salary) AS avg_salary; 
req_data = FILTER inp_data_fmt BY salary > avg_salary; 
DUMP req_data;