编辑:更改 HQL 语句以映射到 JSON 结构。但错误仍然存在
我尝试了多种方法来创建 HIVE 表并使用 JSONSerDe 检索数据。但这是我遇到的错误:
hive> select * from jobs;
OK
Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: j
ava.io.EOFException: No content to map to Object due to end of input
hive> select values from jobs;
Diagnostic Messages for this Task:
java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error
while processing writable
at org.apache.hadoop.hive.ql.exec.ExecMapper.map(ExecMapper.java:159)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:417)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java :1408)
下面是建表语句:
create external table jobs (
jobs STRUCT<
values : ARRAY<STRUCT<
id : STRING,
customerJobCode : STRING,
postingDate : STRING,
expirationDate : STRING,
company : STRUCT<
id : STRING,
name : STRING>,
position : STRUCT<
title : STRING,
jobFunctions : STRING,
industries : STRING,
jobType : STRING,
experienceLevel : STRING>,
skillsAndExperience : ARRAY<STRING>,
descriptionSnippet : ARRAY<STRING>,
salary : STRING,
jobPoster : STRUCT<
id : STRING,
firstName : STRING,
lastName : STRING,
headline : STRING>,
referralBonus : STRING,
locationDescription : STRING>>>
)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
LOCATION '/user/sunita/tables/jobs';
我尝试不将“值”(结构数组)添加到表描述中也尝试在输入文件和表创建语句中不添加“值”。这种方法没有错误,但正如人们所预料的那样,只有 1 个条目进入表,其他所有内容都为空。Hive 将其视为导致此问题的单个记录。
我尝试简化输入以选择较少的字段,但在检索信息时仍然出现相同的错误。非常感谢这方面的任何帮助。
还使用 Notepad ++ JSON 插件确保 JSON 字符串有效。任何帮助都是真正的感激。