2013-08-20 56 views
0

一个CSV文件,我想下面的命令来加载使用猪用命令的CSV文件:操纵使用猪

A = LOAD '/USER/XYZ/PIG/FILENAME.ASC' USING PIGSTORAGE(',');

虽然它加载并没有给出错误,cat a给了我一个Directory does not exist error。我对猪很陌生,知道我在那里做了一件非常错误的事情。我如何检查它是否确实加载?或者是加载了一个用词不当,文件只存在于HDFS上?

接下来,我想从CSV文件中剪下几列数据并将其存储在另一个文件中。我怎么去解决它?

我不一定需要脚本/代码,但是如果您能指出正确的功能来完成我想要做的事情,那就太棒了。谢谢!

回答

1

要查看当前内容A,您可以使用DUMPA;。要查看架构/关系,您可以使用DESCRIBEA;

一旦你知道了A的模式,你可以投射出你想要的字段。例如。 B = FOREACH A GENERATE $0 AS foo, $4 AS bar ;仅选择第1列和第5列,分别命名为foo和bar。

存储可以用STOREB INTO 'myoutdir' USING PigStorage('|') ;完成,其中您选择作为分隔符的字符可以是任何单个字符。

因此,例如这是当我测试它的脚本会怎样看:

A = LOAD '/USER/XYZ/PIG/FILENAME.ASC' USING PIGSTORAGE(',') ; 
DESCRIBE A ; 
DUMP A ; 

B = FOREACH A GENERATE $0, $4; 
DESCRIBE B ; 
DUMP B ; 

STORE B INTO 'myoutdir' USING PigStorage('|') ; 
+0

谢谢你完美的答案!我正在度假,并没有测试过你的代码,直到昨天。你会碰巧知道如何处理多个文件?像..如果file1,然后给列2-8,如果file2,然后给列4-6等,或者更好地实现通过使用Java/Python编写的脚本? – CodingInCircles

+0

@CodingInCircles您需要加载多少个文件?你总是可以单独地加载每个文件,然后为每个别名投射适当的字段。 – mr2ert

+0

大约有100-150个文件,未来可能会更多。为了保持很多变量/占位符,这可能不是一个挑战吗? – CodingInCircles