[HADOOP] 돼지에 JSON 배열로드하기
HADOOP돼지에 JSON 배열로드하기
다음 형식의 json 파일이 있습니다.
[
{
"id": 2,
"createdBy": 0,
"status": 0,
"utcTime": "Oct 14, 2014 4:49:47 PM",
"placeName": "21/F, Cunningham Main Rd, Sampangi Rama NagarBengaluruKarnatakaIndia",
"longitude": 77.5983817,
"latitude": 12.9832418,
"createdDate": "Sep 16, 2014 2:59:03 PM",
"accuracy": 5,
"loginType": 1,
"mobileNo": "0000005567"
},
{
"id": 4,
"createdBy": 0,
"status": 0,
"utcTime": "Oct 14, 2014 4:52:48 PM",
"placeName": "21/F, Cunningham Main Rd, Sampangi Rama NagarBengaluruKarnatakaIndia",
"longitude": 77.5983817,
"latitude": 12.9832418,
"createdDate": "Oct 8, 2014 5:24:42 PM",
"accuracy": 5,
"loginType": 1,
"mobileNo": "0000005566"
}
]
JsonLoader 클래스를 사용하여 돼지에 데이터를로드하려고 할 때 예기치 않은 end-of-input과 같은 오류가 발생합니다 : OBJECT에 대한 예상 가까운 마커
a = LOAD '/user/root/jsoneg/exp.json' USING JsonLoader('id:int,createdBy:int,status:int,utcTime:chararray,placeName:chararray,longitude:double,latitude:double,createdDate:chararray,accuracy:double,loginType:double,mobileNo:chararray');
b = foreach a generate $0,$1,$2;
dump b;
해결법
-
==============================
1.언젠가는 비슷한 종류의 문제에 직면하게됩니다. 나중에 Pig JSON이 다중 선 json 형식을 지원하지 않을 것임을 알게되었습니다. json 입력은 항상 한 줄로 입력해야합니다.
언젠가는 비슷한 종류의 문제에 직면하게됩니다. 나중에 Pig JSON이 다중 선 json 형식을 지원하지 않을 것임을 알게되었습니다. json 입력은 항상 한 줄로 입력해야합니다.
네이티브 Jsonloader 대신 Elephantbird json loader를 사용하는 것이 좋습니다. 그것은 꽤 Jsons 형식에 좋습니다.
다음 링크에서 항아리를 다운로드 할 수 있습니다.
http://www.java2s.com/Code/Jar/e/elephant.htm
입력 형식을 한 줄로 변경하고 elephantbird를 통해 아래에로드했습니다.
input.json {"test":[{"id": 2,"createdBy": 0,"status": 0,"utcTime": "Oct 14, 2014 4:49:47 PM","placeName": "21/F, Cunningham Main Rd, Sampangi Rama NagarBengaluruKarnatakaIndia","longitude": 77.5983817,"latitude": 12.9832418,"createdDate": "Sep 16, 2014 2:59:03 PM","accuracy": 5,"loginType": 1,"mobileNo": "0000005567"},{"id": 4,"createdBy": 0,"status": 0,"utcTime": "Oct 14, 2014 4:52:48 PM","placeName": "21/F, Cunningham Main Rd, Sampangi Rama NagarBengaluruKarnatakaIndia","longitude": 77.5983817,"latitude": 12.9832418,"createdDate": "Oct 8, 2014 5:24:42 PM","accuracy": 5,"loginType": 1,"mobileNo": "0000005566"}]} PigScript: REGISTER '/tmp/elephant-bird-hadoop-compat-4.1.jar'; REGISTER '/tmp/elephant-bird-pig-4.1.jar'; A = LOAD 'input.json ' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad'); B = FOREACH A GENERATE FLATTEN($0#'test'); C = FOREACH B GENERATE FLATTEN($0) AS mymap; D = FOREACH C GENERATE mymap#'id',mymap#'placeName',mymap#'status'; DUMP D; Output: (2,21/F, Cunningham Main Rd, Sampangi Rama NagarBengaluruKarnatakaIndia,0) (4,21/F, Cunningham Main Rd, Sampangi Rama NagarBengaluruKarnatakaIndia,0)
from https://stackoverflow.com/questions/26710438/load-json-array-into-pig by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Oozie와 함께 sqoop을 사용하여 중복 관찰하기 (0) | 2019.07.03 |
---|---|
[HADOOP] Hadoop - 처리 단계를 이해하는 데 필요한 도움말 (0) | 2019.07.03 |
[HADOOP] 분산 캐시 (0) | 2019.07.02 |
[HADOOP] HBase에서 Hive로 테이블을 옮기는 방법은 무엇입니까? (0) | 2019.07.02 |
[HADOOP] 날짜 별 Java MapReduce 계산 (0) | 2019.07.02 |