我想在大致如下的行中删除大括号外的字符。
35|{......}|
剥离' 35 |'从正面和尾随' |'从最后开始。
{.....}
最初处理前3个字符时,我尝试以下操作,但它会删除所有内容。
a = LOAD '/file' as (line1:chararray);
b = FOREACH x generate REPLACE(line1, '35|','');
dump b;
任何想法都赞赏。感谢。
答案 0 :(得分:4)
|
和{
和}
是正则表达式中的特殊字符,REPLACE
的第二个参数是正则表达式。试着逃避角色:
b = FOREACH x generate REPLACE(line1, '35\\|','');
答案 1 :(得分:0)
更多信息:如果您想将数据转换为更复杂的形式,只能通过REPLACE实现,您可以创建一个Javascript / Java / Jython / Ruby / Groovy / Python用户定义函数(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);