仅在条件满足时才发出组

时间:2015-09-04 21:45:14

标签: hadoop apache-pig

我要求发出与组相对应的所有记录,仅在满足条件时。以下是别名为“SAMPLE_DATA”的示例数据集。

Col-1   |  Col-2 | Col-3
-------------------------
2       | 4      | 1
2       | 5      | 2
----      ----     ---
4       | 5      | 1
4       | 6      | 2

结果应该是:

$value=0;



if ($value !== '')
{
//do something
}

生成了两组。生成第一组,因为4,5的最大值是“5”(满足我们的条件> = 5)。对于第二组(6> = 5)也是如此。

因为我将对大数据集操作执行此操作,例如distinct和join将是过度的。出于这个原因,我提出了一个伪代码和一个分组来执行此操作。

希望我提供了足够的信息。提前谢谢。

我将在庞大的数据集上执行此操作。像distinct和join这样的操作对系统来说太过分了。出于这个原因,我提出了这种分组方法。

1 个答案:

答案 0 :(得分:0)

请尝试以下代码并查看..

这个解决方案有点冗长,但它会起作用

self.context['user']

O / P:

numbers = LOAD '/home/user/inputfiles/c1.txt' USING PigStorage(',') AS(c1:int,c2:int,c3:int);

num_grp = GROUP numbers by c1;

num_each = FOREACH num_grp 
                  {
                    max_each = MAX(numbers.c2);
                    generate flatten(group) as temp_c1, (max_each >= 5 ?1 :0) as indicator;
                  };

num_each_filtered = filter num_each BY indicator == 1; 

num_joined = join numbers BY c1,num_each_filtered by tem_c1;

num_output = FOREACH num_joined GENERATE c1,c2,c3;

dump num_output;