gpt4 book ai didi

hadoop - 代码生成在 avro - hadoop 中意味着什么

转载 作者:可可西里 更新时间:2023-11-01 15:02:24 25 4
gpt4 key购买 nike

如果这个问题很愚蠢,请深表歉意。我发现很难理解它的真正含义。当我阅读“Hadoop 权威指南”时,它说 avro 的最大优势是代码生成在 Avro 中是可选的。 This link有一个带有/不带代码生成的 avro 序列化/反序列化程序。有人可以帮助我准确理解有/没有代码生成的含义以及它们的真实上下文吗。

最佳答案

这不是一个愚蠢的问题——它实际上是 Avro 的一个非常重要的方面。

使用代码生成通常意味着编译您的 Java 应用程序之前,您有可用的 Avro 模式。作为开发人员,您将使用 Avro 编译器为模式中的每条记录生成一个类,并在您的应用程序中使用这些类。

在引用的链接中,作者这样做:java -jar avro-tools-1.7.5.jar compile schema student.avsc,然后使用student_marks直接上课。

在这种情况下,类student_marks 的每个实例都继承自SpecificRecord,具有访问内部数据的自定义方法(例如getStudentId() 获取 student_id 字段)。

没有代码生成通常意味着您的应用程序没有任何特定的必要架构(例如,它可以处理不同类型的数据)。

在这种情况下,没有生成student 类,但您仍然可以读取Avro 容器中的Avro 记录。您不会有 student 的实例,而是 GenericRecord 的实例。不会有任何有用的方法,例如 getStudentId(),但您可以使用方法 get("student_marks")get(0) .

通常,将特定记录与代码生成一起使用更易于阅读、更易于序列化和反序列化,但当编译时不知道要处理的记录的确切架构时,通用记录会提供更大的灵 active 。

一个有用的思考方式是将一些数据存储在有用的手写 POJO 结构与 Object[] 之间的区别。前者更容易开发,但如果数据的类型和数量是动态的或未知的,则后者是必需的。

关于hadoop - 代码生成在 avro - hadoop 中意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30277442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com