【问题标题】:Is it possible to retrieve schema from avro data and use them in MapReduce?是否可以从 avro 数据中检索模式并在 MapReduce 中使用它们?
【发布时间】:2014-11-25 16:32:05
【问题描述】:

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

但最近我不得不在 avro 模式中添加一个新列并重新编译 java 类。

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

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

我认为不是!

【问题讨论】:

    标签: hadoop mapreduce avro


    【解决方案1】:

    是的,没有。但是您可以将其读取为GenericRecord,然后将这些字段映射到您更新的类型对象。我在高层次上经历了这个here

    【讨论】:

    【解决方案2】:

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

    在这种情况下,您希望像这样为 MapReduce 作业设置读取模式和数据模型:

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

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 2012-12-01
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2017-09-18
      • 2019-07-19
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多