从pig导出为CSV

时间:2012-12-04 04:21:07

标签: excel csv apache-pig

我很难从猪身上获取数据,而且我可以在Excel或SQL(或R或SPSS等等)中使用CSV而无需大量操作......

我尝试过使用以下功能:

STORE pig_object INTO '/Users/Name/Folder/pig_object.csv'
    USING CSVExcelStorage(',','NO_MULTILINE','WINDOWS');

它创建具有该名称的文件夹,其中包含许多part-m-0000#文件。我以后可以使用cat part *>加入他们。 filename.csv但没有标题,这意味着我必须手动将它放入。

我已经读过PigStorageSchema应该用标题创建另一个位但它似乎根本不起作用,例如,我得到的结果就像它刚刚存储一样,没有头文件: STORE pig_object INTO'/ Users / Name / Folder / pig_object' 使用org.apache.pig.piggybank.storage.PigStorageSchema();

(我在本地和mapreduce模式下都试过这个。)

有没有办法将Pig中的数据导入一个简单的CSV文件而没有这些多步骤?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:30)

我担心没有一个单行工作能胜任,但你可以提出以下几点(Pig v0.10.0):

A = load '/user/hadoop/csvinput/somedata.txt' using PigStorage(',') 
      as (firstname:chararray, lastname:chararray, age:int, location:chararray);
store A into '/user/hadoop/csvoutput' using PigStorage('\t','-schema');

PigStorage采用“-schema”时,它会在输出目录中创建“.pig_schema”和“.pig_header”。然后,您必须将“.pig_header”与“part-x-xxxxx”合并:

1。如果需要将结果复制到本地磁盘:

hadoop fs -rm /user/hadoop/csvoutput/.pig_schema
hadoop fs -getmerge /user/hadoop/csvoutput ./output.csv

(由于-getmerge采用输入目录,因此首先需要删除.pig_schema

2. 将结果存储在HDFS上:

hadoop fs -cat /user/hadoop/csvoutput/.pig_header 
  /user/hadoop/csvoutput/part-x-xxxxx | 
    hadoop fs -put - /user/hadoop/csvoutput/result/output.csv

如需进一步参考,您可能还会看一下这些帖子:
STORE output to a single CSV?
How can I concatenate two files in hadoop into one using Hadoop FS shell?

答案 1 :(得分:1)

如果您将数据存储在HDFS上PigStorage,然后使用-getmerge -nl合并:

STORE pig_object INTO '/user/hadoop/csvoutput/pig_object'
    using PigStorage('\t','-schema');
fs -getmerge -nl /user/hadoop/csvoutput/pig_object  /Users/Name/Folder/pig_object.csv;

Docs:

  

可选择-nl可以设置为启用添加换行符(LF)   每个文件的结尾。

您将拥有一个具有以下结构的TSV / CSV文件:

1 - header
2 - empty line
3 - pig schema
4 - empty line
5 - 1st line of DATA
6 - 2nd line of DATA
...

所以我们可以使用AWK删除行[2,3,4]

awk 'NR==1 || NR>4 {print}' /Users/Name/Folder/pig_object.csv > /Users/Name/Folder/pig_object_clean.csv