是否可以从avro数据中检索模式并在MapReduce中使用它们?

时间:2014-11-25 16:32:05

标签: hadoop mapreduce avro

我使用avro-tools将我的avro架构转换为Java类,我将其传递给Avro-Map-Input-Key-Schema进行数据处理。这一切都很好。

但是最近我不得不向avro架构添加一个新列并重新编译java类。

这是我遇到问题的地方,因为我以前生成的数据是由旧方案序列化的,所以我的MapReduce作业现在在修改架构后失败,即使我的MapReduce逻辑没有使用新列。

因此,我想知道我是否可以停止传递Java模式类并从数据中检索模式并动态处理数据,这是可能的。

我认为不是!

2 个答案:

答案 0 :(得分:0)

是的,没有。但是您可以将其作为GenericRecord读取,然后将字段映射到更新的类型对象。我在高级别here进行了这一点。

答案 1 :(得分:0)

可以使用更新的架构读取现有数据。 Avro将始终使用其标头中的架构读取文件,但如果您还提供了预期的架构(或“读取架构”),则Avro将创建符合所请求架构的记录。最终会跳过未请求的字段或填写文件中缺少的字段的默认值。

在这种情况下,您希望为MapReduce作业设置读取架构和数据模型,如下所示:

AvroJob.setInputSchema(job, MyRecord.getClassSchema());
AvroJob.setDataModelClass(job, SpecificData.class);