我有一个名为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;
但是,这仍然会返回整个元组。
有人可以建议这样做的方法吗?我的印象是尊重运算符应该允许我这样做。
提前致谢!
丹尼尔
答案 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);
}