尝试将json文件加载到配置单元中的外部表时出错

czq61nw1  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(422)

数据如下:
{“custid”:1185972,“movieid”:null,“genreid”:null,“time”:“2012-07-01:00:00:07”,“recommended”:null,“activity”:8}
我正在运行的查询是:

add jar /home/student/hive-0.11.0-bin/lib/json-serde-1.3.7-jar-with-dependencies.jar;

CREATE EXTERNAL TABLE movie_json 
( custId INT, movieId INT, genreId INT, 
time STRING, recommended STRING, activity INT, rating INT, price FLOAT ) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
LOCATION '/user/oracle/movie/';

遇到的错误是:
java.lang.nosuchfielderror:bytetypeinfo位于org.openx.data.jsonserde.objectinspector.primitive.typeentryshim.(typeentryshim。java:27)位于org.openx.data.jsonserde.objectinspector.primitive.javastringjsonobjectinspector.(javastringjsonobjectinspector。java:14)在org.openx.data.jsonserde.objectinspector.jsonobjectinspectorfactory.(jsonobjectinspectorfactory)。java:196)在org.openx.data.jsonserde.jsonserde.initialize(jsonserde。java:125)位于org.apache.hadoop.hive.metastore.metastoreutils.getdeserializer(metastoreutils。java:215)在org.apache.hadoop.hive.ql.metadata.table.getdeserializerfrommetastore(表。java:268)位于org.apache.hadoop.hive.ql.metadata.table.getdeserializer(表。java:261)在org.apache.hadoop.hive.ql.metadata.table.getcols(表。java:587)在org.apache.hadoop.hive.ql.metadata.hive.createtable(hive。java:576)在org.apache.hadoop.hive.ql.exec.ddltask.createtable(ddltask)。java:3776)位于org.apache.hadoop.hive.ql.exec.ddltask.execute(ddltask)。java:256)在org.apache.hadoop.hive.ql.exec.task.executetask(任务。java:144)位于org.apache.hadoop.hive.ql.exec.taskrunner.runsequential(taskrunner)。java:57)在org.apache.hadoop.hive.ql.driver.launchtask(driver。java:1355) 在org.apache.hadoop.hive.ql.driver.execute(driver。java:1139)在org.apache.hadoop.hive.ql.driver.run(driver。java:945)在org.apache.hadoop.hive.cli.clidriver.processlocalcmd(clidriver。java:259)在org.apache.hadoop.hive.cli.clidriver.processcmd(clidriver。java:216)在org.apache.hadoop.hive.cli.clidriver.processline(clidriver。java:413)在org.apache.hadoop.hive.cli.clidriver.run(clidriver。java:756)位于org.apache.hadoop.hive.cli.clidriver.main(clidriver。java:614)在sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)在sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl)。java:39)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:25)在java.lang.reflect.method.invoke(方法。java:597)在org.apache.hadoop.util.runjar.main(runjar。java:156)失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddltask返回代码-101
我使用了各种jsonserder jar,但是得到了相同的错误。请帮帮我。

k0pti3hp

k0pti3hp1#

不太清楚 JsonSerDe 您正在使用。但这是这个 JsonSerDe 你可以用。
配置单元json serde

hive> add jar /User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar;
Added [/User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar] to class path
Added resources: [/User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar]
hive>CREATE EXTERNAL TABLE movie_json ( custId INT, movieId INT, genreId INT, time STRING, recommended STRING, activity INT, rating INT, price FLOAT ) ROW FORMAT SERDE'org.openx.data.jsonserde.JsonSerDe'
LOCATION'/user/oracle/movie/';
OK
Time taken: 0.097 seconds

您可以使用

C:\Users\User1\Downloads\Hive-JSON-Serde-develop\Hive-JSON-Serde-develop>mvn -Phdp23 clean package.
-Phdp23 is hdp2.3 it should be replaced with your hadoop version.

也可以使用内置 jsonserde 获取\u json\u objectjson\u tupleif您正在寻找如何使用内置的示例 jsonserde 看看这个例子。
我建议你验证一下 Json 验证json

相关问题