복붙노트

[HADOOP] Pig를 사용하여 열의 JSON 문자열을 구문 분석하는 방법

HADOOP

Pig를 사용하여 열의 JSON 문자열을 구문 분석하는 방법

json 문자열에 의해 열이 채워지는 tsv 로그 파일이 있습니다.

돼지 스크립트에서 JsonLoader로 해당 열을 구문 분석하고 싶습니다. 각 행이 단지 json 문자열 인 경우 JsonLoader가 사용되는 많은 예제를 보았습니다. 건너 뛰고 싶은 다른 열이 있는데 그 방법을 모릅니다.

파일은 다음과 같습니다.

foo    bar    {"version":1; "type":"an event"; "count": 1}
foo    bar    {"version":1; "type":"another event"; "count": 1}

어떻게해야합니까?

해결법

  1. ==============================

    1.Elephant Bird에서 제공하는 JsonStringToMap UDF를 찾고 있습니다. https://github.com/kevinweil/elephant-bird/search?q=JsonStringToMap&ref=cmdform

    Elephant Bird에서 제공하는 JsonStringToMap UDF를 찾고 있습니다. https://github.com/kevinweil/elephant-bird/search?q=JsonStringToMap&ref=cmdform

    샘플 파일 :

    foo     bar     {"version":1, "type":"an event", "count": 1}
    foo     bar     {"version":1, "type":"another event", "count": 1}
    

    돼지 스크립트 :

    REGISTER /path/to/elephant-bird.jar;
    DEFINE JsonStringToMap com.twitter.elephantbird.pig.piggybank.JsonStringToMap();
    raw = LOAD '/tmp/file.tsv' USING PigStorage('\t') AS (col1:chararray,col2:chararray,json_string:chararray);
    parsed = FOREACH raw GENERATE col1,col2,JsonStringToMap(json_string);
    ILLUSTRATE parsed; -- Just to show the output
    

    사전 처리 (JSON을 chararray / string) :

    -------------------------------------------------------------------------------------------------------
    | raw     | col1:chararray    | col2:chararray    | json_string:chararray                             | 
    -------------------------------------------------------------------------------------------------------
    |         | foo               | bar               | {"version":1, "type":"another event", "count": 1} | 
    

    후 처리 (JSON을지도로) :

    -------------------------------------------------------------------------------------------------
    | parsed     | col1:chararray    | col2:chararray    | json:map(:chararray)                     | 
    -------------------------------------------------------------------------------------------------
    |            | foo               | bar               | {count=1, type=another event, version=1} | 
    -------------------------------------------------------------------------------------------------
    

    이틀 전에했던 질문과 똑같은 질문이 있습니다. 칼럼에서 나온 돼지에서 JSON을 어떻게 디코딩합니까?

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

    2.Elephantbird (Hadoop 모든 것에 대한 Twitter의 라이브러리)를 확인하십시오. JsonStringToMap이라는 UDF를 사용하면 원하는대로 정확하게 수행 할 수 있습니다 (문자열을 가져 와서지도로 변환).

    Elephantbird (Hadoop 모든 것에 대한 Twitter의 라이브러리)를 확인하십시오. JsonStringToMap이라는 UDF를 사용하면 원하는대로 정확하게 수행 할 수 있습니다 (문자열을 가져 와서지도로 변환).

  3. from https://stackoverflow.com/questions/23812265/how-to-parse-a-json-string-from-a-column-with-pig by cc-by-sa and MIT license