我必须得到每行的文件名,所以我用
data = LOAD 'data.csv' using PigStorage(',','-tagFile') AS (filename:chararray);
但是在data.csv中,一些列在内容中也有逗号(,),以便处理我使用的逗号问题
data = LOAD 'data.csv' using org.apache.pig.piggybank.storage.CSVExcelStorage()AS (filename:chararray);
但我没有任何选择在CSVExcelStorage中使用-tagFile选项。 请告诉我如何一次使用CSVExcelStorage和-tagFile选项?
由于
答案 0 :(得分:1)
我找到了执行这两个操作的方法(获取每行中的文件名,如果它出现在列内容中则替换分隔符)
data = LOAD 'data.csv' using PigStorage(',','-tagFile') AS (filename:chararray, record:chararray);
/*replace comma(,) if it appears in column content*/
replaceComma = FOREACH data GENERATE filename, REPLACE (record, ',(?!(([^\\"]*\\"){2})*[^\\"]*$)', '');
/*replace the quotes("") which is present around the column if it have comma(,) as its a csv file feature*/
replaceQuotes = FOREACH replaceComma GENERATE filename, REPLACE ($4,'"','') as record;
一旦数据正确加载而没有逗号,我可以自由执行任何操作。 详细用例可在my blog
获得答案 1 :(得分:0)
您不能将-tage文件与CSVExcelStorage一起使用,因为CSVExcelStorage没有-tagFile选项。解决方法是更改文件的分隔符并使用PigStorage和新的分隔符和-tagFile或替换逗号你的数据。