我有一个问题,我需要根据其他字段替换字符串。
示例数据:
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;
任何想法?
感谢
答案 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