使用pig从数据中删除单引号

rkue9o1l  于 2021-06-25  发布在  Pig
关注(0)|答案(4)|浏览(318)

这就是我的数据

(10, 'ACCOUNTING', 'NEW YORK')
(20, 'RESEARCH', 'DALLAS')
(30, 'SALES', 'CHICAGO')
(40, 'OPERATIONS', 'BOSTON')

我想删除 ( , ) 以及 ' 使用pig脚本从这个数据。我希望我的数据像这样-

10, ACCOUNTING, NEW YORK
20, RESEARCH, DALLAS
30, SALES, CHICAGO
40, OPERATIONS, BOSTON

很久以来,我一直在坚持这个观点。请帮忙。提前谢谢。

z9zf31ra

z9zf31ra1#

当您的数据有双引号时,这里可能更简单,因为它不使用regex:

A = LOAD 'input' AS (line:chararray);
B = FOREACH A GENERATE REPLACE(line,'"','');
STORE B INTO 'output';
jtw3ybtb

jtw3ybtb2#

当您知道第一列包含数值,其余列包含字符时,也可以采用以下方法。
正在加载分隔符为的文件,
sam=使用pigstorage(',')加载'sample.txt';
sam1=foreach sam generate replace($0,“([^0-9\s]+)”,“”),replace($1,“([^a-za-z\s]+)”,“”),replace($2,“([^a-za-z\s]+)”,“”);
您将获得以下输出:
(10,会计,纽约)
(20岁,达拉斯研究所)
(30,销售部,芝加哥)
(40岁,波士顿运营部)

50pmv0ei

50pmv0ei3#

当你的数据有双引号而不是单引号以下将工作。

loaded = LOAD 'input' AS (row:chararray);
formatted = FOREACH loaded GENERATE REPLACE(row,'[\\"\\(\\)]+','');
STORE formatted INTO 'hdfs_output';

--要使用修正后的数据,你可以像往常一样加载它

formatted_data = LOAD 'hdfs_output' USING PigStorage('$DELIMITER','-noschema') AS (column_name:datatype,..etc);
ohtdti5x

ohtdti5x4#

你能试试吗 REPLACE 使用以下正则表达式的函数?
说明:
在正则表达式中,很少有字符有特殊的含义 \ ^ $ . , | ? * + ( ) [ { . 这些特殊字符称为“ metacharacters ". 如果您想使用这些字符中的任何一个作为regex的一部分,那么您需要 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 对于单引号 \\\' 删除特殊含义。
三。 [] is character class ,这将只匹配几个字符中的一个。只需将字符放在你想要匹配的方括号内即可 [()'] .
4 + symbol 用于匹配一个或多个字符。
输入

(10, 'ACCOUNTING', 'NEW YORK')
(20, 'RESEARCH', 'DALLAS')
(30, 'SALES', 'CHICAGO')
(40, 'OPERATIONS', 'BOSTON')

pigscript1:脚本1:

A = LOAD 'input' AS (line:chararray);
B = FOREACH A GENERATE REPLACE(line,'[\\\'\\(\\)]+','');
STORE B INTO 'output';

pigscript2:脚本2:

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

相关问题