[hive] json 테스트, org.apache.hadoop.hive.serde2.SerDeException: Row is not a valid JSON Objec 에러 해결하기
hadoop 2017. 2. 24. 19:11json 데이터를 저장할 hive 테이블을 생성하는 예시이다.
CREATE TABLE if not exists member
(
name STRING,
id INT,
props STRUCT <
departname:STRING,
alias:STRING
>
) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
STORED AS TEXTFILE
json 데이터를 hive에 저장할 때 개행 문자가 있으면 에러가 발생한다.
$ cat "test.json"
{
"name":"samuel",
"id":1,
"props": {
"departname":"none",
"alias":"kim"
}
}
다음 에러로 발생한다.
Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: Row is not a valid JSON Object - JSONException: A JSONObject text must end with '}' at 2 [character 3 line 1]
따라서 개행 문자 없이 사용해야 한다.
$ cat "test.json"
{ "name":"samuel", "id":1, "props":{ "departname":"none", "alias":"kim" }}
이제 하둡에 json 파일을 업로드한다.
$ hadoop fs -put test.json /lib/test.json
hive 실행을 실행해서 데이터를 읽게 한다.
hive> LOAD DATA INPATH '/lib/test.json' OVERWRITE INTO TABLE member;
hive> select * from member;
OK
samuel 1 {"departname":"none","alias":"kim"}
Time taken: 0.614 seconds, Fetched: 1 row(s)
SELECT props.alias FROM member WHERE props.departname="none";
kim