[英]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.