将多个空格替换为单个空格,使用ApachePig删除“0”和前导

hgb9j2n6  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(450)

需要Pig的帮助吗

A = load 'input.txt' as (line:chararray);
B = foreach A generate FLATTEN(TOBAG(*));
C = FOREACH B GENERATE REPLACE(($0, '\\s+', ' ')

在最后一行中需要帮助以单个空格替换多个空格,请删除 " (引号)和前导 00 使用apache pig
note:- approach 不应该是特定于字段的,因为有超过70个字段,基本上,需要replace、strstring或regex函数的帮助,这些函数可以在一行上执行上述操作。
输入文件

00595, ab 000cdef      california "state,   00USA
00733, 0ds ds "ARIZONA 00state, USA

预期产量

595, ab cdef califormia state, USA
733, ds ds ARIZONA state, USA
uxhixvfz

uxhixvfz1#

你可以用 REPLACE 函数在pig中进行清理和加载,因为int将从数字中删除前导零。

A = LOAD '/usr/pigfiles/pigo.txt' using PigStorage(',') as (value: INT, state: chararray, country: chararray);  
B = FOREACH A GENERATE value,REPLACE(REPLACE(state,'  ', ' ' ),'\\"',''),  country; 
DUMP B;

2izufjch

2izufjch2#

不能在同一循环中使用嵌套的replace函数。你必须对你的数据做一系列的操作才能得到你想要的结果。
请在您的数据上尝试以下代码。你们提供的样品做得很好。

  • a = LOAD 'ip.txt' USINGTextLoader();* *b = FOREACH a GENERATE REPLACE($0,'\\s+',' ');*c = FOREACH b GENERATE REPLACE($0,'"','');*d = FOREACH c GENERATE REPLACE($0,'\\s+0+',' ');*

相关问题