我必须获得每一行的文件名,所以我使用了
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选项?
谢谢
发布于 2017-08-14 00:06:31
我找到了执行这两个操作的方法(获取每行中的文件名,如果分隔符出现在列内容中,则替换它)
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
发布于 2017-07-20 00:37:52
您不能将-tagefile与CSVExcelStorage一起使用,因为CSVExcelStorage没有-tagFile option.The,解决方法是更改文件的分隔符,并使用带有新分隔符和-tagFile的PigStorage,或者替换数据中的逗号。
https://stackoverflow.com/questions/45195963
复制相似问题