我正在为我们的项目建立一个遥测管道处理。我已经输入了avro编码,通过使用schema注册表,我将avro数据解码为基于schemaid的genericord。我计划运行spark作业进行进一步的下游处理。但是,在spark jobs中处理数据模型的最佳方法是什么?所有的例子都指向使用result.get(“fieldname”),但这是建议的方法吗?
我正在为我们的项目建立一个遥测管道处理。我已经输入了avro编码,通过使用schema注册表,我将avro数据解码为基于schemaid的genericord。我计划运行spark作业进行进一步的下游处理。但是,在spark jobs中处理数据模型的最佳方法是什么?所有的例子都指向使用result.get(“fieldname”),但这是建议的方法吗?
1条答案
按热度按时间eh57zj3b1#
使用genericrecord的好处是,它从使用者抽象出与模式注册表相关的细节。因此,您不必从有效负载记录中获取模式id,对合流模式注册表进行get调用以获取avro模式,然后进行反序列化。我不知道这对性能有什么影响,但我很想知道是否有影响。
另一方面,如果希望使用自己的avro bytearray序列化程序/反序列化程序,则需要了解avro负载的结构。e、 g.您必须解析avro负载来验证魔法字节,提取4字节的模式id和模式,等等。。。您可能希望实现一个已经检索到的模式的内存缓存,因为减少对模式注册表的http调用是一个好主意。更多的细节,可以在这里找到。