在Pig中删除单列

时间:2012-05-31 14:49:07

标签: hadoop mapreduce apache-pig

我正在通过大约20个ID的列表过滤表格。现在我的代码看起来像这样:

A = LOAD 'ids.txt' USING PigStorage();
B = LOAD 'massive_table' USING PigStorage();
C = JOIN A BY $0, B BY $0;
D = FOREACH C GENERATE $1, $2, $3, $4, ...
STORE D INTO 'foo' USING PigStorage();

我不喜欢的是D行,我必须重新生成一个新表,通过明确声明我想要的每一个其他列(有时候是很多列)来摆脱加入列。我想知道是否有相当于的东西:

FILTER B BY $0 IN (A)

或:

DROP $0 FROM C

2 个答案:

答案 0 :(得分:9)

也许这个问题类似于:

引用JIRA票证:https://issues.apache.org/jira/browse/PIG-1693哪些示例如何使用..表示法来表示所有剩余字段:

D = FOREACH C GENERATE $1 .. ;

这假设你有0.9.0+ PIG

答案 1 :(得分:2)

按编号删除列

如果你想删除第5列,你可以这样做:

D = FOREACH C GENERATE .. $4, $6 .. ;

按名称删除列

如果要按名称删除列,只有知道要删除的列的名称才能显示该列。但是,如果您在此列之前和之后直接知道列的名称,则可以进行此操作。如果你想删除colBeforeMyCol和colAfterMyCol之间的列,你可以这样做:

aliasAfter = FOREACH aliasBefore GENERATE 
             .. colBeforeMyCol, colAfterMyCol ..;