没有使用连接的猪条件计数

时间:2015-12-19 07:18:13

标签: apache-pig

假设我有以下数据

Hour  status
12     pass
12     fail
13     fail
13     fail
13     pass

我需要计算结果如下

Hour passcount  failcount TotalCount
12    1           1          2
13    1           2          3

我知道我可以通过使用2个单独的过滤器分割记录来实现这一点,其中一个用于'传递'一个失败的' ,将它们分开计算并加入它们(如下所示)

pass_data = FILTER data by (status matches 'pass') ;
pass_group = group pass_data by hour; 
pass_count = foreach pass_group  generate flatten(group), count($1) as pass_count ; 

original_count = foreach (group data by hour ) generate flatten(group),count($1) as total_count ; 
joined = join original_count by hour , pass_count by hour ;

但我喜欢上述解决方案。主要是因为它的代码行很多,实际上除了'传递之外还有多种状态。并且'失败' 我正在寻找的是如下所示:

 awesome_count= foreach (group data by hour ) generate flatten(group),count($1) as total_count , count($1.status=='pass'?0:1) as pass_count ; 

以上不起作用主要是因为状态对我来说是一个包...但我测试了一些简单的字段,猪不喜欢它..抛出所有类型的错误。 我希望有一种更好的方法或语法可以利用吗?

1 个答案:

答案 0 :(得分:2)

对于您的输入,您可以尝试嵌套的foreach语句,以下逻辑将帮助您。

{{1}}