2

JSON Serde を使用して JSON ファイルを Hive にロードしようとしています。一度に 1 つの JSON ファイルに対して動作させることはできますが、JSON ファイルに一度に複数のレコードを入れて、それらを一度にロードできるかどうか疑問に思っていました。アイデアを与えるために、私の JSON ファイルは次のようになります。

ファイル 1

{"styles": {"style": "Deep House"}, "genres": {"genre": "Electronic"}}

ファイル 2

{"styles": {"style": "Rock"}, "genres": {"genre": "Techno Rock"}}

これらを組み合わせて、次のように 1 つの JSON ファイルを作成しました。

{"styles": {"style": "Deep House"}, "genres": {"genre": "Electronic"}},{"styles": {"style": "Rock"}, "genres": {"genre": "Techno Rock"}}

このファイルをロードすると、最初のレコードのみがロードされます。私のテーブルDDLは以下の通りです:

create table json_data (
styles struct<style: string>,
genres struct<genre: string>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe';

標準LOADコマンドを使用します。

LOAD DATA LOCAL INPATH '/home/user/json_data' INTO TABLE json_data;

テーブルをクエリすると、挿入されるレコードは 1 つだけです。

select * from json_data;
    {"style":"Deep House"}  {"genre":"Electronic"}
    Time taken: 0.76 seconds

ここで JSON ファイルの作成に何か問題がありますか? または、1 つの JSON ファイルに 2 つのレコードを含めることはできませんか? どんな助けでも本当に感謝しています。

ありがとう、TM

4

1 に答える 1

3

複数の Json レコードをハイブ テーブルにロードできますが、各 Json レコードを改行文字で区切る必要があります。

json_data ファイルの内容:

{"styles": {"style": "Deep House"}, "genres": {"genre": "Electronic"}}
{"styles": {"style": "Rock"}, "genres": {"genre": "Techno Rock"}}

select * from json_data;
OK
{"style":"Deep House"}  {"genre":"Electronic"}
{"style":"Rock"}        {"genre":"Techno Rock"}

その理由は、Json Serde の実装がその構文でそれを想定しているためです。Jsonserde githubリンクのリンクの下を見つけてください

https://github.com/rcongiu/Hive-JSON-Serde/blob/develop/src/main/java/org/openx/data/jsonserde/JsonSerDe.java

于 2014-05-02T20:06:55.870 に答える