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;