2

私はApache Avroを使用しています。

Java コードでスキーマ json 文字列を定義しました。

String schemaStr = STRING_IN_JSON_FORMAT;

//use Parser to parse above string to Schema object
Schema.Parser parser = new Schema.Parser(); 
Schema schema = parser.parse(schemaStr);
//How to programmatically get the class from the schema I got at this point?

プログラムでスキーマからクラスを取得するためにコードを続行するにはどうすればよいですか?

4

1 に答える 1

3

Avro は実行時に Java 型を生成しません。手動で記述して入力するか、汎用スキーマ インスタンスを使用するか、Avro Tools または Avro Maven プラグインを使用してスキーマ定義を Java クラスにコンパイルする必要があります。あなたはおそらく最初のものをしたくないでしょう。

1. 一般的なスキーマ表現を使用する

スキーマを適用するスキーマ データを含むレコードを単純に作成する場合は、次を使用できますGenericRecord

GenericRecord datum = new GenericData.Record(schema);
datum.put("field1", fieldValue)`

これはAvroRuntimeException、field1 がスキーマで定義されていない場合にスローされます。

2. Java クラスの生成

Fish を記述するスキーマがあり、対応する Java com.example.Fish が必要な場合は、スキーマからコンパイルする必要があります。Avro Tools または Avro Maven プラグインを使用してこれを行うことができます。ドキュメント を参照してください。「namespace」プロパティがクラスのパッケージ階層を決定することに注意してください。

対応する Java クラスを取得したので、それにデータを入力する方法がいくつかあります。

于 2013-10-23T01:07:12.840 に答える