Hadoop / Pig CSVExcelStorage具有不同的分隔符

时间:2013-12-16 15:08:33

标签: csv hadoop apache-pig

将以下输入文件与PiggyBank的CSVExcelStorage一起使用就可以了:

Col1,Col2,Col3
1,2,3
"1","2","3"

小猪脚本

REGISTER /usr/lib/pig/piggybank.jar;
DEFINE CSVExcelStorage org.apache.pig.piggybank.storage.CSVExcelStorage; 
a = LOAD '/path/to/file.csv' USING CSVExcelStorage()
b = FOREACH a GENERATE $1;
DUMP b

按预期工作并返回

(Col2)
(2)
(2)

使用分号作为分隔符执行相同的操作不起作用:

Col1;Col2;Col3
1;2;3
"1";"2";"3"

经过调整的猪脚本

REGISTER /usr/lib/pig/piggybank.jar;
DEFINE CSVExcelStorage org.apache.pig.piggybank.storage.CSVExcelStorage; 
a = LOAD '/path/to/file.csv' USING CSVExcelStorage(';')
b = FOREACH a GENERATE $1;
DUMP b

简单地返回

()
()
()

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

我自己找到了解决方案。 DEFINE语句是问题,并阻止将参数传递给CSVExcelStorage()。以下内容将按预期工作:

REGISTER /usr/lib/pig/piggybank.jar;
a = LOAD '/path/to/file.csv' USING org.apache.pig.piggybank.storage.CSVExcelStorage(';')
b = FOREACH a GENERATE $1;
DUMP b