你能用下面的正则表达式试试REPLACE 函数吗?
说明:
在正则表达式中,很少有字符具有特殊含义\ ^ $ . , | ? * + ( ) [ {。这些特殊字符称为“metacharacters”。
如果您想使用这些字符中的任何一个作为您的正则表达式的一部分,那么您需要escape them with a single backslash。在我们的例子中 Pig uses Java based regex engine 所以所有的 specials characters needs be escaped with double backslash (Java 使用 \\ 双反斜杠来区分特殊字符)。
从您的输入中删除 '(' ')' and '(single quote) 字符。
1. 只需将() 替换为双反斜杠\\(\\)。
2.'(single quote)是Pig(default string literal)中的特殊字符,所以这也需要双反斜杠来消除特殊含义,但双反斜杠doesn't convince pig parser(you will get error for double backslash)这就是我使用three backslash作为单引号@987654335的原因@ 删除特殊含义。
3. [] is character class,这将只匹配几个字符中的一个。只需将字符放在要匹配的方括号内,即。在我们的例子中是[()']。
4. + symbol 用于匹配一个或多个字符。
输入
(10, 'ACCOUNTING', 'NEW YORK')
(20, 'RESEARCH', 'DALLAS')
(30, 'SALES', 'CHICAGO')
(40, 'OPERATIONS', 'BOSTON')
PigScript1:
A = LOAD 'input' AS (line:chararray);
B = FOREACH A GENERATE REPLACE(line,'[\\\'\\(\\)]+','');
STORE B INTO 'output';
Pigscript2:
A = LOAD 'input' USING PigStorage(',') AS (col1:chararray,col2:chararray,col3:chararray);
B = FOREACH A GENERATE REPLACE(col1,'[\\(]+',''),REPLACE(col2,'[\\\']',''),REPLACE(col3,'[\\)\\\']+','');
STORE B into 'output1' USING PigStorage(',');
输出:将存储在 output/part-m-00000 文件中
10, ACCOUNTING, NEW YORK
20, RESEARCH, DALLAS
30, SALES, CHICAGO
40, OPERATIONS, BOSTON