gpt4 book ai didi

hadoop - 仅在条件满足时发出小组

转载 作者:行者123 更新时间:2023-12-02 21:35:50 24 4
gpt4 key购买 nike

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

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

SAMPLE_DATA_GRP = GROUP SAMPLE_DATA BY Col-1;
RESULT = FOREACH SAMPLE_DATA_GRP {
max_value = MAX(SAMPLE_DATA.Col-2);
IF(max_value >= 5)
GENERATE ALL RECORDS IN THAT GROUP;
}

结果应为:
Col-1   |  Col-2 | Col-3
-------------------------
2 | 4 | 1
2 | 5 | 2
---- ---- ---
4 | 5 | 1
4 | 6 | 2

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

因为我将对诸如distinct和join之类的大型数据集操作执行此操作,所以会过分杀伤。出于这个原因,我想出了带有一组代码的伪代码来执行此操作。

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

我将在庞大的数据集上执行此操作。进行诸如distinct和join之类的操作将对系统造成过大的打击。因此,我提出了这种分组方法。

最佳答案

请尝试以下代码,然后查看..

这个解决方案时间不长,但是可以用

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;

O / p:
Col-1   |  Col-2 | Col-3
-------------------------
2 | 4 | 1
2 | 5 | 2
---- ---- ---
4 | 5 | 1
4 | 6 | 2

关于hadoop - 仅在条件满足时发出小组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32407015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com