我很难从猪身上获取数据,而且我可以在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文件而没有这些多步骤?
非常感谢任何帮助!
答案 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;
可选择-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