[HADOOP] 돼지에 문자를 교체
HADOOP돼지에 문자를 교체
내 데이터의 형식은 다음과 ...
{"Foo":"ABC","Bar":"20090101100000","Quux":"{\"QuuxId\":1234,\"QuuxName\":\"Sam\"}"}
나는이 형식에있을 필요가 :
{"Foo":"ABC","Bar":"20090101100000","Quux":{"QuuxId":1234,"QuuxName":"Sam"}}
내가 필요로하는 형식으로 그걸 얻기 위해 돼지의 대체 기능을 사용하기 위해 노력하고있어 .. 그래서 나는 시도 ..
"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, '"\\{', '\\{');"
지금, 그것은 표현이나 문장의 오류 .. 예기치 않은 토큰 '\\'제공합니다.
어떤 도움을 진심으로 감사드립니다 ..
감사
해결법
-
==============================
1.나를 위해 작동 :
나를 위해 작동 :
REPL1 = FOREACH LOGS GENERATE REPLACE($0, '"\\{', '\\{');
코드에서 당신은 생성 누락 및 시작과 끝에 큰 따옴표 잘못이다.
-
==============================
2.아래의 코드를 확인하시기 바랍니다.
아래의 코드를 확인하시기 바랍니다.
LOGS = load 'inputlocation' as unparsedString:chararray; REPL1 = foreach LOGS generate REPLACE($0, '"\\{', '\\{'); REPL2 = foreach REPL1 generate REPLACE($0, '}"', '}'); STORE REPL2 INTO 'outputlocation';
작동 바랍니다.
-
==============================
3.아래와 같이 구분자를 사용하여 데이터를로드
아래와 같이 구분자를 사용하여 데이터를로드
SAM =로드 '샘플 데이터'( '') PigStorage을 사용함;
SAM1 = foreach는 샘, $ 0 $ 1 CONCAT (REPLACE ($ 2 발생 ','([^ A-ZA-Z0-9 "{] +) ', $ 3 (교환),'([^ A-Za- Z0-9 "}] +) '' '));
이렇게하면 원하는 출력을 제공 할 것입니다.
({ "푸": "ABC", "바": "20090101100000", "Quux": "{"QuuxId "1234"QuuxName ":"샘 "}"})
from https://stackoverflow.com/questions/31470995/replace-character-in-pig by cc-by-sa and MIT license