私は指定されたスキーマを持つavroファイルを持っています。 Avroファイルを読み込んでいるときに、スキーマを指定していても、常にGenericDataとして出力されます。Avroファイルは常にGenericRecordとして読み込まれます
val schema = Article.Schema$
val job = new Job()
AvroJob.setInputKeySchema(job, schema)
val rootDir = "path-to-avro-files"
val articlesRDD = sc.newAPIHadoopFile(rootDir, classOf[AvroKeyInputFormat[Article]], classOf[AvroKey[Article]], classOf[NullWritable], job.getConfiguration)
このコードは動作し、私はアブロファイルに含まれるデータとRDDを取得するが、残念ながらRDDのエントリは、タイプGenericDataのすべてです。
Caused by: java.lang.ClassCastException: org.apache.avro.generic.GenericData$Record cannot be cast to de.uni_mannheim.desq.converters.nyt.avroschema.Article
これは私が
val abstracts = articlesRDD.map(tuple => {
val abstract = tuple._1.datum.getAbstract
abstract
}
またアブロファイルからフィールドを抽出するために使用するコードは次のとおりです。これは私が私の特定のスキーマのフィールドにアクセスしたいとき、私は次のエラーを取得しています意味します'datum'にアクセスした後に 'asInstanceOf'を呼び出すと(GenericRecordをMy Articleに変換するために)、同じエラーが発生します。
'SpecifcRecord'が必要な場合は、プロパティとスキーマが一致する' ISpecificRecord'を実装するクラスが必要です。 – JSteward
私は、avroツールjarを持つavroスキーマからSpecificRecordを実装するクラスを自動生成しました。 – 2rist