首页 > 解决方案 > 猪脚本循环虽然计算平均值

问题描述

我有将使用 aws emr 在 pig 中运行的数据。这些列称为模型、年份、units_sold、total_customers。

chevy     1900     1000    49
chevy     1901     73      92
chevy     1902     45      65
chevy     1903     300     75
ford      1900     35      12
ford      1901     777     32
ford      1902     932     484
ford      1903     33      15

我要做的是计算每种汽车类型的平均值。平均值的计算方法是将units_sold 的总和除以total_customers 的总和。所以想要的结果看起来像

chevy    (1000+73+45+300) / (49+92+65+75) = 5.04
ford     (35+777+932+33) / (12+32+484+15) = 3.27

在我的脚本中我有

A = *Step to load data*;
B = GROUP A by year;
C = results = FOREACH B GENERATE SUM(units_sold)/SUM(total_customers);
dump C;

这会返回一个不正确的结果。我怎样才能获得看起来像的结果

chevy    5.04
ford     3.27

标签: apache-pigamazon-emr

解决方案


看起来您需要按汽车类型而不是年份分组。此外,如果您不想要一个四舍五入的结果,您可能需要转换为 float ifunits_sold和are integers。total_customers尝试:

B = GROUP A by model;
C = FOREACH B GENERATE (float)SUM(units_sold)/(float)SUM(total_customers);

推荐阅读