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 (i​​d:chararray,日期:字符数组,文本:字符数组); YES_MULTILINE 允许在字段中换行。这可以防止存在换行符的字段在加载步骤中被截断。对于嵌入字符的实际删除,一旦我们加载具有上述更改的数据,替换功能就会起作用。

以上是关于Pig - 删除 gzip 文件中嵌入的换行符和逗号的主要内容,如果未能解决你的问题,请参考以下文章

Pig base 64 编码/每条记录存储单行/删除换行符

在java中运行pig而不嵌入pig脚本

Apache PIG:pigstorage 不添加扩展

在 CPython 中嵌入 Pig

使用 PIG 或 HIVE 从 CSV 中删除前两行

无法删除 Pig 中的特殊字符