2016-11-24 83 views
0

我能夠使用JSON Serde org.openx.data.jsonserde.JsonSerDe創建Hive表,但是當我讀取Hive表中的數據時,我無法閱讀。JSON數據讀入Hive表

hive> create table emp (EmpId int , EmpFirstName string , EmpLastName string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'; 
OK 
Time taken: 2.148 seconds 

hive> LOAD DATA INPATH '/user/cloudera/EmpData/emp.json' INTO table emp; 
Loading data to table employee.emp 
chgrp: changing ownership of 'hdfs://quickstart.cloudera:8020/user/hive/warehouse/employee.db/emp/emp.json': User does not belong to supergroup 
Table employee.emp stats: [numFiles=1, totalSize=4163] 
OK 
Time taken: 1.141 seconds 

hive> select * from emp; 
OK 
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] 
Time taken: 0.504 seconds 

回答

0

錯誤:無法用異常產生java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException:行不是有效的JSON對象 - JSONException:一個JSONObject文字必須以「}結束'在2 [3字符線1]

檢查在/user/cloudera/EmpData/emp.json提供的JSON是有效

可以通過

ALTER TABLE table emp SET SERDEPROPERTIES ("ignore.malformed.json" = "true"); 
消除無效的行

檢查此鏈接 - >https://github.com/rcongiu/Hive-JSON-Serde

編輯: 這是無效的JSON

{ "cols": [ "EmpId", "EmpFirstName", "EmpLastName" ], "data": [ [ 1, "Hannah", "Walton" ], [ 2, "Barrett", "Mendoza" ], [ 3, "Camden", "Kidd" ], [ 4, "Illiana", "Collier" ] ] }

的JSON您提供具有

key:cols and value:[ "EmpId", "EmpFirstName", "EmpLastName" ]

key :data and value :[ [ 1, "Hannah", "Walton" ], [ 2, "Barrett", "Mendoza" ], [ 3, "Camden", "Kidd" ], [ 4, "Illiana", "Collier" ]

json的應該是類似

{"EmpId":1,"EmpFirstName":"Hannah","EmpLastName":"Walton"} 
{"EmpId":2,"EmpFirstName":"Barrett","EmpLastName":"Mendoza"} 
{"EmpId":3,"EmpFirstName":"Camden","EmpLastName":"Kidd"} 
+0

首先,我要感謝您的答覆。 我嘗試了你所建議的選項,但是現在我對所有字段都變爲「空」。我的JSON文件是正確的,我能夠正確解析它。 請參閱這是在蜂巢表造成的問題我的樣本數據: { \t 「的cols」: \t \t 「EMPID」, \t \t 「EmpFirstName」, \t \t 「EmpLastName」 \t], \t「數據「:[ \t \t [ \t \t \t 1, \t \t \t 」漢娜「, \t \t \t 「沃爾頓」 \t \t], \t \t [ \t \t \t 2, \t \t \t 「巴雷特」, \t \t \t 「門多薩」 \t \t], \t \t [ \t \t \t 3, \t \t \t 「卡姆登」, \t \t \t 「基德」 \t \t], \t \t [ \t \t \t 4, \t \t \t 「Illiana」, \t \t \t 「科利爾」 \t \t] \t ] } –

+0

檢查我編輯的JSON規範 –