1
我有一個指定模式的avro文件。 當我加載Avro文件時,他們總是以GenericData出現,即使我指定了Schema。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)
此代碼的工作,我也得到與包含在Avro的文件中的數據,但遺憾的是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
這是我使用從Avro的文件
val abstracts = articlesRDD.map(tuple => {
val abstract = tuple._1.datum.getAbstract
abstract
}
而且提取的字段代碼在訪問'datum'(爲了將GenericRecord轉換爲我的文章)後調用'asInstanceOf'導致相同的錯誤。
如果你想要'specifcRecord',你需要一個類來實現具有匹配屬性和模式的'ISpecificRecord'。 – JSteward
我有自動生成的類實現SpecificRecord avro工具jar與avro工具。 – 2rist