替换pig中的字符

ktecyv1j  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(460)

我的数据格式如下。。

{"Foo":"ABC","Bar":"20090101100000","Quux":"{\"QuuxId\":1234,\"QuuxName\":\"Sam\"}"}

我需要这样的格式:

{"Foo":"ABC","Bar":"20090101100000","Quux":{"QuuxId":1234,"QuuxName":"Sam"}}

我试着用pig的replace函数来得到我需要的格式。。所以,我试着。。

"LOGS = LOAD 'inputloc' USING TextStorage() as unparsedString:chararray;;" +
"REPL1 = foreach LOGS REPLACE($0, '"{', '{');" +
"REPL2 = foreach REPL1 REPLACE($0, '}"', '}');"
"STORE REPL2 INTO 'outputlocation';"

它抛出了一个错误。。表达式或语句中意外的标记“{”。
所以根据这里的答案,我试着:

"REPL1 = foreach LOGS REPLACE($0, '"\\{', '\\{');"

现在,它给出了一个错误。。表达式或语句中出现意外标记“\”。
我们真诚地感谢您的帮助。。
谢谢

fquxozlt

fquxozlt1#

使用分隔符加载数据,如下所示:
sam=使用pigstorage(',')加载“sampledata”;
sam1=foreach sam生成$0,$1,concat(replace($2,“([^a-za-z0-9:“{]+)”,“”),replace($3,“([^a-za-z0-9:“}]+)”,“”));
这将为您提供所需的输出。
({“foo”:“”,“bar”:“20090101100000”,“qux”:“{“quxid”:1234“quxname”:“sam”}”)

55ooxyrt

55ooxyrt2#

请检查下面的代码。

LOGS = load 'inputlocation' as unparsedString:chararray;
REPL1 = foreach LOGS generate REPLACE($0, '"\\{', '\\{');
REPL2 = foreach REPL1 generate REPLACE($0, '}"', '}');
STORE REPL2 INTO 'outputlocation';

希望能成功。

yrefmtwq

yrefmtwq3#

为我工作:

REPL1 = FOREACH LOGS GENERATE REPLACE($0, '"\\{', '\\{');

在代码中缺少 GENERATE 开头和结尾的双引号是错误的。

相关问题