Pig - 删除 gzip 文件中嵌入的换行符和逗号
Posted
技术标签:
【中文标题】Pig - 删除 gzip 文件中嵌入的换行符和逗号【英文标题】:Pig - Remove embedded newlines and commas in gzip files 【发布时间】:2015-07-13 21:52:27 【问题描述】:我有一个 gzip 文件,其中的数据字段用逗号分隔。我目前正在使用 PigStorage 加载文件,如下所示:
A = load 'myfile.gz' USING PigStorage(',') AS (id,date,text);
gzip 文件中的数据具有嵌入字符 - 嵌入换行符和逗号。这些字符存在于所有三个字段中 - id、日期和文本。嵌入的字符总是在 "" 引号内。
我想在进行任何进一步处理之前使用 Pig 替换或删除这些字符。
我想我需要首先查找 "" 引号的出现。找到这些引号后,我需要查看这些引号中的字符串并搜索其中的逗号和换行符。找到后,我需要用空格替换它们或删除它们。
如何通过 Pig 实现这一点?
【问题讨论】:
字段用逗号分隔,字段内可以是逗号吗?是什么分隔了字段中的逗号?或者,这些字段是否已经解析.. @sln 是的,字段用逗号分隔。在字段中,可以有逗号(这不是字段分隔符,而只是字段中包含的文本的一部分)。字段中的逗号在 "" 引号内。 @activelearner : CSVExcelStorage 或 CSVLoader 会将 "" 中表示的文本加载为单个字段。试试建议的答案,然后告诉我。 【参考方案1】:试试这个:
REGISTER piggybank.jar;
A = LOAD 'myfile.gz' USING org.apache.pig.piggybank.storage.CSVExcelStorage() AS (id:chararray,date:chararray,text:chararray);
B = FOREACH A GENERATE REPLACE(REPLACE(id,'\n',''),',','') AS id, REPLACE(REPLACE(date,'\n',''),',','') AS date, REPLACE(REPLACE(text,'\n',''),',','') AS text;
我们可以使用:org.apache.pig.piggybank.storage.CSVExcelStorage() 或 org.apache.pig.piggybank.storage.CSVLoader()。
详情请参考以下 API 链接
-
http://pig.apache.org/docs/r0.12.0/api/org/apache/pig/piggybank/storage/CSVExcelStorage.html
http://pig.apache.org/docs/r0.9.1/api/org/apache/pig/piggybank/storage/CSVLoader.html
【讨论】:
非常感谢!这对我有用。我所做的唯一修改是在加载 gzip 文件时,我使用 A = LOAD 'myfile.gz' USING org.apache.pig.piggybank.storage.CSVExcelStorage(',', 'YES_MULTILINE') AS (id:chararray,日期:字符数组,文本:字符数组); YES_MULTILINE 允许在字段中换行。这可以防止存在换行符的字段在加载步骤中被截断。对于嵌入字符的实际删除,一旦我们加载具有上述更改的数据,替换功能就会起作用。以上是关于Pig - 删除 gzip 文件中嵌入的换行符和逗号的主要内容,如果未能解决你的问题,请参考以下文章