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

Apache pig 使用其他字段中的值替换值,apache-pig,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 我尝试了以下方法,但不起作用(没有错误根本不起作用) 有什么想法吗 谢谢REPLACE采用正则表达式,因此需要使用CONCAT构造该正则表达式 因此,一个相当麻烦的解决方案是: B = FOREACH A GENERATE REPLACE( field1, CONCAT

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

样本数据:

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
我尝试了以下方法,但不起作用(没有错误根本不起作用)

有什么想法吗


谢谢

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

因此,一个相当麻烦的解决方案是:

B = FOREACH A GENERATE 
    REPLACE( field1, CONCAT ( CONCAT('(', field2), ')'), '')) as field1, field2;
因此,对于第一行,CONCAT将构造一个regexp
'(x)

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

B=每一个A生成一个 修剪(将(现场1,混凝土(混凝土)(“(”,现场2),“)”),”)替换为现场1,现场2

更好的解决方案是编写您自己的udf,这样您的pig代码就更可读了

e、 g

B=每个A生成MyReplaceWithBlank(字段1,字段2)作为字段1,字段2


请参见

您能再解释一下所需的输出是什么吗?看起来您只想每隔一行更改一次,并删除第一个字段的第二/第三个字符。我想替换基于其他字段的字符串。如果field1包含field2,则将该字符串替换为null,否则不执行任何操作。因此,我需要一个简单的替换函数,但不是使用硬编码的“oldstring”,我需要使其具有动态性,值在字段2中。到目前为止,我已尝试使用pig版本,但没有完成所有字段保持不变的工作。无需替换。它适用于我的pig 0.12.1。如果您尝试不使用CONCAT,例如B=FOREACH A生成替换(field1,“(x)”,)作为field1,field2;-你是否更改了字段。它有效。举个小例子,我在其他地方遇到了问题。谢谢Hanks Louise它有效。我有另一个问题导致了这个问题。
B = FOREACH A GENERATE 
    REPLACE( field1, CONCAT ( CONCAT('(', field2), ')'), '')) as field1, field2;