这就是我的数据
(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
很久以来,我一直在坚持这个观点。请帮忙。提前谢谢。
4条答案
按热度按时间z9zf31ra1#
当您的数据有双引号时,这里可能更简单,因为它不使用regex:
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岁,波士顿运营部)
50pmv0ei3#
当你的数据有双引号而不是单引号以下将工作。
--要使用修正后的数据,你可以像往常一样加载它
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
用于匹配一个或多个字符。输入
pigscript1:脚本1:
pigscript2:脚本2:
输出:将存储在output/part-m-00000文件中