使用Pig脚本替换列中的任何换行符



我使用pig脚本从CSV中删除了一些列:

Cleaned = FOREACH data generate  $0 .. $8,$11 .. $27, $31 .. $41, $45 .. $97, $99 .. $111;

在我保留的列中,我需要去掉任何可能损坏hive中数据的新行字符。可以是n, r, rn, <br>。由于它是用户输入的数据,我相信在使用enter键输入数据时创建的换行符将是上面提到的字符之一,如果您还可以指定它转换为什么,我会很感激,但在大多数情况下,我需要确保任何类型的换行符被从数据中删除,以确保我的数据被hive CSV Parser正确映射。我如何在我用来过滤掉列的pig脚本中做到这一点?

编辑:1。我希望继续使用列范围,而不必指定每个列。2. 上面的例子并不包括所有类型的换行符

由于您有大量的列,您最好将数据加载为line:chararray,然后使用REPLACE函数。一旦数据被清理,您可以使用STRSPLIT将行分割成列,然后使用范围来获得所需的列。

A = LOAD 'data.csv' AS (line:chararray);
B = FOREACH A GENERATE REPLACE(REPLACE(REPLACE(REPLACE(line,'\n',''),'\r',''),'\r\n',''),'<br>','');
C = FOREACH B GENERATE FLATTEN(STRSPLIT($0,','));
D = FOREACH C GENERATE  $0 .. $8,$11 .. $27, $31 .. $41, $45 .. $97, $99 .. $111;
DUMP D;

您可以使用"org.apache.pig.piggybank.storage.CSVExcelStorage(',')"存储类导入数据,然后您可以使用replace命令将"new line"字符替换为字段中的数据。

/usr/lib/pig/piggybank.jar登记;a = LOAD '/path/to/file.csv' USING org.apache.pig.piggybank.storage.CSVExcelStorage(',')b = FOREACH $1;转储b

Piggybank是提供的默认jar,所以不需要注册就可以使用。

最新更新