我的数据格式如下。。
{"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, '"\\{', '\\{');"
现在,它给出了一个错误。。表达式或语句中出现意外标记“\”。
我们真诚地感谢您的帮助。。
谢谢
3条答案
按热度按时间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”}”)
55ooxyrt2#
请检查下面的代码。
希望能成功。
yrefmtwq3#
为我工作:
在代码中缺少
GENERATE
开头和结尾的双引号是错误的。