PIG脚本用管道符号替换

时间:2014-05-21 05:13:16

标签: replace apache-pig

我想在大致如下的行中删除大括号外的字符。

35|{......}|

剥离' 35 |'从正面和尾随' |'从最后开始。

{.....}

最初处理前3个字符时,我尝试以下操作,但它会删除所有内容。

 a = LOAD '/file' as (line1:chararray);

 b = FOREACH x generate REPLACE(line1, '35|','');

 dump b;

任何想法都赞赏。感谢。

3 个答案:

答案 0 :(得分:4)

|{}是正则表达式中的特殊字符,REPLACE的第二个参数是正则表达式。试着逃避角色:

b = FOREACH x generate REPLACE(line1, '35\\|','');

答案 1 :(得分:0)

更多信息:如果您想将数据转换为更复杂的形式,只能通过REPLACE实现,您可以创建一个Javascript / Java / Jython / Ruby / Groovy / Python用户定义函数(UDF)来获取您的数据作为输入并返回处理过的数据。

Javascript UDF示例:

猪脚本:

 --including the js file containing the UDF
 register 'test.js' using javascript as myfuncs;

 a = LOAD '/file' as (line1:chararray);

 --Processing each line1 by calling UDF
 b = FOREACH x generate myfuncs.processData(line1);
 dump b;

<强> test.js

 processData.outputSchema = "word:chararray,num:long";

 function processData(word){
    return {word:word, num:word.length};
 }

要了解UDF的工作原理,请查看:Pig Documentation for UDF

答案 2 :(得分:0)

您可以使用REGEX_EXTRACT:

REGEX_EXTRACT(line1, '.*(\\{.*\\}).*', 1);

http://pig.apache.org/docs/r0.12.1/func.html#regex-extract