Hadoop 使用Pig基于多个字段的不同记录
输入数据集:Hadoop 使用Pig基于多个字段的不同记录,hadoop,apache-pig,Hadoop,Apache Pig,输入数据集: field1,field2,field3,field4,field5 101,a1,a11,a111,a1111 102,a1,a11,a111,a1111 103,a1,a11,a111,a1111 201,b1,b11,b111,b1111 202,b1,b11,b111,b1111 下面的查询将给出Pig中的不同记录 details = load 'emp.csv' using PigStorage(',') AS (field1:chararray,field2:cha
field1,field2,field3,field4,field5
101,a1,a11,a111,a1111
102,a1,a11,a111,a1111
103,a1,a11,a111,a1111
201,b1,b11,b111,b1111
202,b1,b11,b111,b1111
下面的查询将给出Pig中的不同记录
details = load 'emp.csv' using PigStorage(',') AS (field1:chararray,field2:chararray,field3:chararray,field4:chararray,field5:chararray);
distinct_detials = DISTINCT details;
我有一个用例,需要根据字段2、字段3、字段4获取不同的记录
预期产量为
101,a1,a11,a111,a1111
202,b1,b11,b111,b1111
可以使用嵌套的foreach来完成所需的操作:
details = load 'emp.csv' using PigStorage(',') AS (field1:chararray,field2:chararray,field3:chararray,field4:chararray,field5:chararray);
distinct_detials = foreach (GROUP details by (field2, field3, field4) ) {
temp_rel = details.(field1, field5);
temp_limit = LIMIT temp_rel 1;
generate FLATTEN(temp_limit) as (field1, field5), FLATTEN(group) as (field2, field3, field4);
}
DUMP distinct_details;
这将产生以下输出:
(103,a1111,a1,a11,a111)
(202,b1111,b1,b11,b111)
您可以进一步使用
distinct\u details
上的foreach
将字段按顺序排列。我不理解预期的输出field1
在所有5行中都是唯一的,因此即使您使用group details by(field2,field3,field5)
,当您执行distinct时,您将获得所有5行,因为field1
。我想根据field2,field3,field4查找不同的记录。field1、field5值可以是记录值之一。