猪脚本循环通过计算平均值
Posted
技术标签:
【中文标题】猪脚本循环通过计算平均值【英文标题】:pig script loop though calculate averages 【发布时间】:2018-10-26 04:16:01 【问题描述】:我有将使用 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
【问题讨论】:
【参考方案1】:看来您需要按汽车类型而不是年份来分组。此外,如果units_sold
和total_customers
是整数,如果您不想要四舍五入的结果,您可能需要强制转换为浮点数。试试:
B = GROUP A by model;
C = FOREACH B GENERATE (float)SUM(units_sold)/(float)SUM(total_customers);
【讨论】:
以上是关于猪脚本循环通过计算平均值的主要内容,如果未能解决你的问题,请参考以下文章