簡體   English   中英

代碼生成在Avro中是什么意思-hadoop

[英]What does code generation mean in avro - hadoop

如果這個問題很愚蠢,請感到遺憾。 我發現很難理解它的真正含義。當我讀到“ Hadoop權威指南”時,它說avro的最大優點是代碼生成在Avro中是可選的。 該鏈接具有用於有/無代碼生成的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)

通常,將特定記錄與代碼生成一起使用更易於閱讀,更易於序列化和反序列化,但是當在編譯時不知道要處理的記錄的確切架構時,通用記錄會提供更大的靈活性。

想到它的一種有用方法是,在有用的手寫POJO結構中存儲一些數據與Object[]之間的區別。 前者更易於開發,但如果數據的類型和數量是動態的或未知的,則后者是必需的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM