使用pig过滤CSV列

时间:2015-04-25 13:54:41

标签: csv hadoop hive apache-pig bigdata

您好stackoverflow社区;

我是猪的新手,我有一个CSV文件,其中包含5个带标题的列,它们看起来像:

column1 | column2 | column3 | column4 | column5

test1012 | test2045 | test3250 | test4865 | test5110
test1245 | test2047 | test3456 | test4234 | test5221 ..........

我想只对第1,3和4列进行排序,但我不知道如何按列标题进行过滤。

如果你可以请我指出能够完成我想要做的事情的正确功能,这将是很棒的。谢谢!

1 个答案:

答案 0 :(得分:2)

假设您加载了类似下面的内容(假设它使用逗号作为分隔符),那么您可以使用ORDER BY功能。

myInput = LOAD 'myFile.csv' USING PigStorage(',') AS
     (c1:chararray,c2:chararry,c3:chararray,c4:chararray,c5:chararry);
mySortedInput = ORDER myInput BY c1 ASC, c3, c4 ASC;
DUMP mySortedInput;

如果您想过滤掉那些列,那么在LOAD之后执行以下操作。

myInputWithLessCols = FOREACH myInput GENERATE
     c1, c3, c4;

如果我完全误解了你想要做的就是过滤掉标题行,那么你可以在LOAD语句之后执行以下操作。

myInputWithoutHeaders = FILTER myInput BY c1 != 'column1'
    AND c2 != 'column2' AND c3 != 'column3' 
    AND c4 != 'column4' AND c5 != 'column5';