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

标签 csv hadoop apache-pig

将以下输入文件与 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/

相关文章:

hadoop - 将数据从 Apache Pig 存储到 SequenceFile

hadoop - 使用 PIG 从 mysqldump 加载

php - 通过 fopen/fwrite 使用 PHP 创建 CSV 文件,但也向其写入标题

java - 如何在 Flink 中获取另一份作业的作业结果?

hadoop - HBase批量加载MapReduce HFile异常(netty jar)

hadoop - 从群集外部访问hdfs

使用 MySQL 插入 (utf8) 读取 PHP CSV

ruby-on-rails - 错误率: FasterCSV to hash

r - 如何有条件地删除 write.csv 中的引号?

hadoop - pig 脚本不存在错误,即使我可以在hdfs中看到它