Apache pig 不使用联接的pig条件计数

Apache pig 不使用联接的pig条件计数,apache-pig,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 我需要计算结果如下 Hour status 12 pass 12 fail 13 fail 13 f

假设我有如下数据

Hour  status
12     pass
12     fail
13     fail
13     fail
13     pass
Hour passcount  failcount TotalCount
12    1           1          2
13    1           2          3
我需要计算结果如下

Hour  status
12     pass
12     fail
13     fail
13     fail
13     pass
Hour passcount  failcount TotalCount
12    1           1          2
13    1           2          3
我知道我可以通过使用两个单独的过滤器拆分记录来实现这一点,一个用于“通过”,另一个用于“失败”,分别对记录进行计数并将其重新连接(如下所示)

但是我不喜欢上面的解决方案。主要是因为它有很多行代码,实际上除了“通过”和“失败”之外,还有多种状态。 我要找的是如下内容:

 awesome_count= foreach (group data by hour ) generate flatten(group),count($1) as total_count , count($1.status=='pass'?0:1) as pass_count ; 
以上这些不起作用,主要是因为地位对我来说是一个包袱。。。但我在一些简单的田地里测试了这个,猪不喜欢。。抛出各种各样的错误。
我希望有更好的方法或语法可以利用

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

 records = LOAD '/home/user/localinputfiles/pass_fail.txt' USING PigStorage('\t') as (hour:int,result:chararray);

 records_grp = GROUP records BY hour;

 records_each = FOREACH records_grp 
                   {
                      passed_bag = FILTER records BY result == 'Pass';
                      failed_bag = FILTER records BY result == 'Fail' ;

                    GENERATE group, COUNT(passed_bag) as pass_cnt, COUNT(failed_bag) as fail_cnt ,COUNT(records) as total_cnt;
                   };

 dump records_each;