Hadoop 从包中提取元组

Hadoop 从包中提取元组,hadoop,mapreduce,apache-pig,Hadoop,Mapreduce,Apache Pig,我有一个元组袋的关系,看起来像这样。袋子里的元组是预购的 {(美国12313833457523,1)、(美国12313833457543,2)、(美国12313833457553,3)} {(英国,45613331347623,1)、(英国,45613331347643,2)、(英国,45613331347653,3)} {(789138331347723,1,英国),(789138331347743,2,英国),(789138331347753,3,英国) 其中元组是:(id:chararra

我有一个元组袋的关系,看起来像这样。袋子里的元组是预购的

{(美国12313833457523,1)、(美国12313833457543,2)、(美国12313833457553,3)}
{(英国,45613331347623,1)、(英国,45613331347643,2)、(英国,45613331347653,3)}
{(789138331347723,1,英国),(789138331347743,2,英国),(789138331347753,3,英国)

其中元组是:
(id:chararray,time:long,event:chararray,location,chararray)

我想得到每个包的第一个元素。因此,我的预期输出是:

(美国1231383331347523,1)
(英国456138331347623,1)
(789138331347723,1,英国)

我试过这个:

data = load 'mydata.txt' USING  PigStorage('\t');
A = FOREACH data GENERATE $0;

dump A;
它产生了和我最初一样的数据包列表

或者,尝试仅提取ID

data = load 'mydata.txt' USING  PigStorage('\t');
A = FOREACH data GENERATE $0.$0;

dump A;
我期望:

(123)
(456)
(789)

但我明白了

{(123)、(123)、(123)}
{(456),(456),(456)}
{(789)、(789)、(789)}


如何调整脚本以获取所需的数据。

在嵌套的foreach中使用
限制

A = FOREACH data { first = LIMIT $0 1; GENERATE FLATTEN(first); }
A = FOREACH data { ord = ORDER $0 BY $1; first = LIMIT ord 1; GENERATE FLATTEN(first); }
您不能指望您的包中的元组被排序,因为根据定义,包是无序的。但是,您也可以在嵌套的foreach中按下订单:

A = FOREACH data { first = LIMIT $0 1; GENERATE FLATTEN(first); }
A = FOREACH data { ord = ORDER $0 BY $1; first = LIMIT ord 1; GENERATE FLATTEN(first); }
我发现,如果将它们拆分为多行,则更易于阅读:

A =
    FOREACH data {
        ord = ORDER $0 BY $1;
        first = LIMIT ord 1;
    GENERATE
        FLATTEN(first);
    };
我假设袋子是按每个元组的第二个字段排序的(
$1