我正在为我们的项目构建遥测管道处理。我有AVRO编码进来并使用Schema注册表,我基于SchemaID将Avro数据解码为GenericRecord。我计划运行Spark作业以进行进一步的下游处理。但是,处理Spark作业中数据模型的最佳方法是什么?所有的例子都指向使用result.get(“fieldname”),但这是建议的方式吗?
答案 0 :(得分:0)
使用GenericRecord的好处是,它从消费者中抽象出与架构注册表相关的细节。因此,您不必从有效内容记录中获取模式ID,对汇合模式注册表进行GET调用以获取avro模式,然后执行反序列化。我不知道有什么性能影响,但肯定会知道是否有任何影响。
另一方面,如果您希望使用自己的avro bytearray串行器/解串器,则需要了解avro有效负载的结构。例如。你要解析avro有效负载以验证魔术字节,提取4字节模式Id和模式,等等......你可能想要实现已经检索到的模式的内存缓存,因为这是一个好主意减少对模式注册表的http调用次数。有关此问题的更多详细信息,请参见here。