如何在 Pig 中将 -tagFile 选项与 CSVExcelStorage 一起使用

How to use -tagFile option with CSVExcelStorage in Pig

我必须获取每一行的文件名,所以我使用了

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);

但是我没有得到任何将 -tagFile 选项与 CSVExcelStorage 一起使用的选项。 请告诉我如何同时使用 CSVExcelStorage 和 -tagFile 选项?

谢谢

您不能将 -tagefile 与 CSVExcelStorage 一起使用,因为 CSVExcelStorage 没有 -tagFile option.The 解决方法是更改​​文件的分隔符并使用带有新分隔符和 -tagFile 的 PigStorage 或替换数据中的逗号。

我找到了执行这两个操作的方法(获取每行中的文件名,如果它出现在列内容中则替换分隔符)

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 (,'"','') as record;

一旦没有逗号正确加载数据,我就可以自由地执行任何操作。 my blog

中提供了详细的用例