难以访问Apache Pig中的元组成员

时间:2014-03-21 17:07:03

标签: hadoop mapreduce apache-pig

我有一个名为F.的变量。

描述F回报: F: {group: bytearray,indexkey: {(indexkey: chararray)}}

转储F返回:

(321,{(CHOW),(DREW)})
(5011,{(CHOW),(DREW)})
(5825,{(TANNER),(SPITZENBERGER)})
(16631,{(CHOW),(DREW)})
(34299,{(CHOW),(DREW)})
(35044,{(TANNER),(SPITZENBERGER)})
(65623,{(CHOW),(DREW)})
(74597,{(SPITZENBERGER),(TANNER)})
(83499,{(SPITZENBERGER),(TANNER)})
(90257,{(SPITZENBERGER),(TANNER)})

我需要的是产生一个看起来像这样的输出(仅第一行作为例子):

(321,DREW,{(CHOW)})

我尝试使用deference来使用它来取出第一个元素:

G = FOREACH F generate indexkey.$0;

但是,这仍然会返回整个元组。

有人可以建议这样做的方法吗?我的印象是尊重运算符应该允许我这样做。

提前致谢!

丹尼尔

1 个答案:

答案 0 :(得分:0)

你不能像那样索引包。原因是包包没有订购的概念。选择包中的第一项应视为随机选择。

无论哪种方式,如果你只需要一个项而不是所有项,你可以使用嵌套的FOREACH来拉出LIMIT为1:

first = FOREACH F {
        lim = LIMIT indexkey 1;
        GENERATE group, lim;
}

(免责声明:我现在无法测试此代码,如果它没有工作让我知道。希望你能得到主旨)

你可以更进一步,然后将它全部移开以完全移除一件物品的包,但要小心,如果行李是空的,我想你会丢掉整个记录。

first = FOREACH F {
        lim = LIMIT indexkey 1;
        GENERATE group, FLATTEN(lim);
}