복붙노트

[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. ==============================

    1.나를 위해 작동 :

    나를 위해 작동 :

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

    코드에서 당신은 생성 누락 및 시작과 끝에 큰 따옴표 잘못이다.

  2. ==============================

    2.아래의 코드를 확인하시기 바랍니다.

    아래의 코드를 확인하시기 바랍니다.

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

    작동 바랍니다.

  3. ==============================

    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 ":"샘 "}"})

  4. from https://stackoverflow.com/questions/31470995/replace-character-in-pig by cc-by-sa and MIT license