pig脚本替换为管道符号

liwlm1x9  于 2021-06-21  发布在  Pig
关注(0)|答案(3)|浏览(319)

我想在如下所示的行中去掉花括号外的字符。

35|{......}|

从前面去掉“35 |”,从后面去掉“|”。

{.....}

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

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

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

 dump b;

有什么想法我都很感激。谢谢。

n7taea2i

n7taea2i1#

更多信息:如果您想将数据转换成一种更复杂的形式,而这种形式不能简单地通过replace来实现,那么您可以创建一个javascript/java/jython/ruby/groovy/python用户定义函数(udf),它将您的数据作为输入并返回处理过的数据。

javascript自定义项示例:

Pig脚本:

--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;

测试.js

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

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

要了解自定义项是如何工作的,请检查以下内容:自定义项的pig文档

iklwldmw

iklwldmw2#

| 以及 { 以及 } 是正则表达式中的特殊字符,是 REPLACE 是正则表达式。尝试转义字符:

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

htzpubme3#

您可以使用regex\u extract:

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

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

相关问题