如何在加入两个数据集和分组后找到平均值Pig中

问题描述:

我有两个数据集EmployeeDetail包含4列(id,name,gender,location)和SalaryDetail(id,salary)。我加入了两套数据集并将它们分组为位置。如何在加入两个数据集和分组后找到平均值Pig中

EmpDetail = load '/Users/bmohanty6/EmployeeDetails/EmpDetail.txt' as (id:int, name:chararray, gender:chararray, location:chararray); 
SalaryDetail = load '/Users/bmohanty6/EmployeeDetails/EmpSalary.txt' as (id:int, salary:float);          
JoinedEmpDetail = join EmpDetail by id, SalaryDetail by id;                   
GroupedByLocation = group JoinedEmpDetail by location; 

DUMP GroupedByLocation给了我期望的正确结果。现在,当我尝试取平均值使用以下行时,

AverageSalary = foreach GroupedByLocation generate group, AVG(SalaryDetail.salary); 

它会抛出错误。

<line 11, column 58> Could not infer the matching function for org.apache.pig.builtin.AVG as multiple or none of them fit. Please use an explicit cast. 

我也试过以下方法。但有同样的错误。

AverageSalary = foreach GroupedByLocation { 
    Sum = SUM(SalaryDetail.salary); 
    Count = COUNT(SalaryDetail.salary); 
    avgSal = Sum/Count; 
    generate group as location, avgSal; 
    }; 

这次错误是:

Could not infer the matching function for org.apache.pig.builtin.SUM as multiple or none of them fit. Please use an explicit cast. 

任何人都可以请建议我做这件事的正确途径。

谢谢Sivasakthi Jayaraman回答我的问题。

AverageSalary = foreach GroupedByLocation generate group, AVG(JoinedEmpDetail.SalaryDetail::salary); 

这给了我每个位置的平均工资。 现在我试图找出location每个性别的平均工资。所以我试图用gender组合GroupedByLocation变量。但是面临一些问题。

GroupdByGender = foreach GroupedByLocation { 
genderGrp = group JoinedEmpDetail by JoinedEmpDetail.EmpDetail::gender; 
avgSalary = foreach genderGrp generate group, AVG(JoinedEmpDetail.SalaryDetail::salary); 
generate group as location, JoinedEmpDetail.EmpDetail::gender, avgSalary; 
}; 

我得到这个错误

Syntax error, unexpected symbol at or near 'JoinedEmpDetail' 

任何人都可以请帮助。

您不能像这样访问salary列,首先需要投影JoinedEmpDetail关系,然后访问salary列。

你可以试试下面的stmt吗?

AverageSalary = foreach GroupedByLocation generate group, AVG(JoinedEmpDetail.SalaryDetail::salary); 
+0

谢谢,这工作。 – Biswa 2015-01-04 13:46:05

+0

我试图找出每个地点的性别平均工资。所以我尝试在GroupedByLocation变量内按性别进行分组。但是面临一些问题。我也更新了这个问题。 – Biswa 2015-01-05 07:10:02

+0

@Biswa,一旦答案被接受,请不要更新相同的问题,但ppl不会查看此问题。您能否将此作为新问题发布,并提供一些示例输入数据和预期输出。 – 2015-01-05 16:36:02