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; 
関連する問題