我正在寻找关于如何钩住转换相同的信息。当前转换总是空的,当使用逻辑类型时,我无法转换为bigdecimal。但是,我可以在自动生成的存根类中看到以下转换。但是反序列化程序读取的对象类型总是bytebuffer,并且它抛出类强制转换异常。
在自动生成的存根文件中(格式清晰):
import org.apache.avro.data.Conversions
import org.apache.avro.data.TimeConversions
protected static final TimeConversions.DateConversion DATE_CONVERSION = new TimeConversions.DateConversion();
protected static final TimeConversions.TimeConversion TIME_CONVERSION = new TimeConversions.TimeConversion();
protected static final TimeConversions.TimestampConversion TIMESTAMP_CONVERSION = new TimeConversions.TimestampConversion();
protected static final Conversions.DecimalConversion DECIMAL_CONVERSION = new Conversions.DecimalConversion();
并且,specificdatumreader readfield()中的转换始终为null。 Conversion conversion = ((SpecificRecordBase)).getConversion(f.pos());
avro版本现在是1.8.2,具有融合平台和注册表。
如何在反序列化程序中设置转换?
1条答案
按热度按时间col17t5w1#
我需要更多的背景来说明你的问题是什么-你一般不会打电话给我
getConversion()
除非你在写连续剧。字段->转换器的查找在实际生成的类中;看看这个:
private static final org.apache.avro.Conversion<?>[] conversions
这个转换表似乎只适用于序列化。反序列化时,需要注册转换。我不知道为什么会这样,但是您应该能够通过在启动时添加以下代码来解决这个问题,这些代码应该可以注册您需要的转换。根据具体的代码路径,您可能还需要在上调用该代码
GenericData.get()...