首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以从avro数据中检索模式并在MapReduce中使用它们?

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

Stack Overflow用户
提问于 2014-11-26 00:32:05
回答 2查看 218关注 0票数 0

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

但是最近我不得不在avro schema中添加一个新的列,并重新编译java类。

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

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

我想它不是!

EN

回答 2

Stack Overflow用户

发布于 2015-07-11 00:50:14

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

票数 0
EN

Stack Overflow用户

发布于 2015-10-08 02:54:35

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

在本例中,您希望为MapReduce作业设置读取模式和数据模型,如下所示:

代码语言:javascript
复制
AvroJob.setInputSchema(job, MyRecord.getClassSchema());
AvroJob.setDataModelClass(job, SpecificData.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27131942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档