1

編集: JSON 構造にマップするように HQL ステートメントを変更しました。しかし、エラーは続く

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';

生の入力ファイルは - https://gist.github.com/anonymous/e2c15d808bbe46b707bf/raw/88d775cb418901807980c52e803ffc8be53adc5f/jobsearch.jsonです。

テーブルの説明に「値」(構造の配列)を追加しないようにしましたまた、入力ファイルとテーブル作成ステートメントに「値」を追加せずに試しました。このアプローチにはエラーはありませんが、予想されるように、テーブルに入るエントリは 1 つだけで、それ以外はすべて null になります。Hive は、この問題を引き起こす単一のレコードと見なします。

より少ないフィールドを選択するために入力を簡素化しようとしましたが、情報を取得するときに同じエラーが発生します。この点でどんな助けも本当に感謝しています。

また、メモ帳 ++ JSON プラグインを使用して、JSON 文字列が有効であることを確認しました。どんな助けでも本当に感謝しています。

4

1 に答える 1

1

問題は、入力ファイルの末尾にある改行でした。データの末尾にある文字を削除したことを確認すると、問題が解決しました。

于 2013-06-16T15:19:49.843 に答える