[HADOOP] 복잡한 Json 데이터를 하이브로 가져 오기
HADOOP복잡한 Json 데이터를 하이브로 가져 오기
작은 숟가락 먹이주기, 복잡한 json을 하이브로 가져 오는 법. {item-id ":"item-1 "}, {"item-id ":"item-2 "} 형식의 Json 파일 : {"some-headers ":" ...]}. 덤불 아래에 밭을 놓으려는 하이브. 현재 Json 파일 크기는 200MB를 초과하지 않지만 덤프 이후 곧 GB에 도달합니다. 다른 가능한 방법은 크게 감사하겠습니다.
해결법
-
==============================
1.HiveSerDe를 구현하여 JSON을 하이브로 가져올 수 있습니다.
HiveSerDe를 구현하여 JSON을 하이브로 가져올 수 있습니다.
이 링크는 샘플 구현의 역할을합니다.
https://github.com/rcongiu/Hive-JSON-Serde
이 링크를 참조 할 수도 있습니다.
JSON 데이터에서 HIVE 테이블을 어떻게 만들 수 있습니까?
-
==============================
2.엔드 - 투 - 엔드 솔루션 게시. JSON을 하이브 테이블로 변환하는 단계별 절차 :
엔드 - 투 - 엔드 솔루션 게시. JSON을 하이브 테이블로 변환하는 단계별 절차 :
1 단계) 이미없는 경우 maven 설치
> $ sudo apt-get install maven
2 단계) 이미 설치하지 않았다면 git 설치
> sudo git clone https://github.com/rcongiu/Hive-JSON-Serde.git
3 단계) $ HOME / HIVE-JSON Serde 폴더로갑니다.
4 단계) serde 패키지 만들기
> sudo mvn -Pcdh5 클린 패키지
5 단계) serde 파일은 $ HOME / Hive-JSON-Serde / json-serde / target / json-serde-1.3.7-SNAPSHOT-jar-with-dependencies.jar
6 단계) 하이브에 종속 항아리로 serde 추가
hive> ADD JAR $HOME/Hive-JSON-Serde/json-serde/target/json-serde-1.3.7- SNAPSHOT-jar-with-dependencies.jar;
7 단계) $ HOME / books.json에 json 파일 생성 (예)
{"value": [{"id": "1","bookname": "A","properties": {"subscription": "1year","unit": "3"}},{"id": "2","bookname":"B","properties":{"subscription": "2years","unit": "5"}}]}
8 단계) 하이브에 tmp1 테이블 만들기
hive>CREATE TABLE tmp1 ( value ARRAY<struct<id:string,bookname:string,properties:struct<subscription:string,unit:string>>> ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'mapping.value' = 'value' ) STORED AS TEXTFILE;
9 단계) json에서 tmp1 테이블로 데이터로드
>LOAD DATA LOCAL INPATH '$HOME/books.json' INTO TABLE tmp1;
10 단계), tmp1 분해 작업을 수행 할 tmp2 테이블을 생성합니다.이 중간 단계는 다중 레벨 json 구조를 여러 행으로 나누는 것입니다 참고 : JSON 구조가 단순하고 단일 레벨이면이 단계를 피하십시오.
hive>create table tmp2 as SELECT * FROM tmp1 LATERAL VIEW explode(value) itemTable AS items;
11 단계) 하이브 테이블을 만들고 tmp2 테이블에서 값을로드합니다.
hive>create table books as select value[0].id as id, value[0].bookname as name, value[0].properties.subscription as subscription, value[0].properties.unit as unit from tmp2;
12 단계) 드롭 tmp 테이블
hive>drop table tmp1; hive>drop table tmp2;
13 단계) 하이브 테이블을 테스트합니다.
hive>select * from books;
산출:
ID 이름 구독 단위
1 B 1 년 3
2 B 2 년 5
from https://stackoverflow.com/questions/15051016/import-complex-json-data-to-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop 2.2.0 MapReduce가 작동하지 않음 (0) | 2019.06.26 |
---|---|
[HADOOP] HDFS 중고품 서버가 HDFS가 아닌 현지 FS의 내용을 반환합니다. (0) | 2019.06.26 |
[HADOOP] multidelimeter를 사용하여 하이브에 데이터 삽입 (0) | 2019.06.26 |
[HADOOP] hadoop에서 스택 오버플로 오류 발생 (0) | 2019.06.26 |
[HADOOP] 지도 축소 프로그램에서 PDF 파일을 구문 분석하는 방법은 무엇입니까? (0) | 2019.06.26 |