Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 使用Pig基于多个字段的不同记录_Hadoop_Apache Pig - Fatal编程技术网

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值可以是记录值之一。