[HADOOP] Pig를 사용하여 열의 JSON 문자열을 구문 분석하는 방법
HADOOPPig를 사용하여 열의 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.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.Elephantbird (Hadoop 모든 것에 대한 Twitter의 라이브러리)를 확인하십시오. JsonStringToMap이라는 UDF를 사용하면 원하는대로 정확하게 수행 할 수 있습니다 (문자열을 가져 와서지도로 변환).
Elephantbird (Hadoop 모든 것에 대한 Twitter의 라이브러리)를 확인하십시오. JsonStringToMap이라는 UDF를 사용하면 원하는대로 정확하게 수행 할 수 있습니다 (문자열을 가져 와서지도로 변환).
from https://stackoverflow.com/questions/23812265/how-to-parse-a-json-string-from-a-column-with-pig by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HBase 테이블의 영역 수를 늘리는 방법 (0) | 2019.07.22 |
---|---|
[HADOOP] 로컬 hadoop과 푸른 하늘 방울 저장소와 연결할 수 없습니다 (0) | 2019.07.22 |
[HADOOP] Hadoop 작업 : 작업이 601 초 동안 상태를보고하지 못합니다. (0) | 2019.07.22 |
[HADOOP] Hive - 열 이름 가져 오기 (0) | 2019.07.22 |
[HADOOP] JAVA를 통해 HIVE2에 연결할 수 없습니다. (0) | 2019.07.22 |