将以下输入文件与 PiggyBank 的 CSVExcelStorage 一起使用效果很好:
Col1,Col2,Col3
1,2,3
"1","2","3"
小 pig 脚本
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"
调整后的pig脚本
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
简单的返回
()
()
()
有什么想法吗?
最佳答案
我自己找到了解决方案。 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
关于csv - 具有不同分隔符的 Hadoop/Pig CSVExcelStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20614117/