如何将-tagfile选项与pig中的csvexcelstorage一起使用

jfgube3f  于 2021-06-24  发布在  Pig
关注(0)|答案(2)|浏览(268)

我必须得到每一行的文件名,所以我使用

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选项一次?
谢谢

2sbarzqh

2sbarzqh1#

不能将-tagefile与csvexcelstorage一起使用,因为csvexcelstorage没有-tagfile选项。解决方法是更改文件的分隔符,并将pigstorage与新的分隔符和-tagfile一起使用,或者替换数据中的逗号。

wgx48brx

wgx48brx2#

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

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;

一旦数据加载正确,没有逗号,我就可以自由地执行任何操作。详细的用例可以在我的博客上找到

相关问题