使用其他字段中的值替换值

时间:2014-06-17 12:45:01

标签: apache-pig

我有一个问题,我需要根据其他字段替换字符串。

示例数据:

field1|field2
1 x|x 
1 x|z
2 p|p
2 z|p

必需的输出:

field1|field2
1|x
1 x|z
2|p
2 z|p

我尝试过以下但不起作用(没有错误根本不做任何事情)

a = LOAD '$path'
                USING PigStorage('|')
                AS (
                field1:chararray,
                field2:chararray
                );  

b = foreach a generate
REPLACE(field1,field2,'') as field1,
field2;

任何想法?

感谢

1 个答案:

答案 0 :(得分:2)

REPLACE采用正则表达式,因此您需要使用CONCAT构造该正则表达式。

所以一个相当麻烦的解决方案是:

B = FOREACH A GENERATE 
    REPLACE( field1, CONCAT ( CONCAT('(', field2), ')'), '')) as field1, field2;

因此对于第一行,CONCAT将构建一个正则表达式'(x)'

为了得到与上面完全相同的输出,我添加了一个TRIM

B = FOREACH A GENERATE        TRIM(REPLACE(field1,CONCAT(CONCAT(&#39;(&#39;,field2),&#39;)&#39;),&#39;&#39;))as field1,field2; < / p>

更好的解决方案是编写自己的udf - 然后你的猪代码会更具可读性

例如

B = FOREACH A生成MyReplaceWithBlank(field1,field2)as field1,field2;

请参阅https://pig.apache.org/docs/r0.12.1/udf.html#eval-functions