为什么不确定性AvroCoder?(Why isn't the AvroCoder dete

2019-10-21 16:40发布

AvroCoder.isDeterministic返回false。

为什么不确定性AvroCoder? 不会的Avro记录总是被编码成相同的字节流?

由于编码器的Avro不确定性的一个阿夫罗记录不能被用作一组由操作的键。 什么是转的Avro的战绩进入了关键的最好方法? 我们应该只使用的Avro记录的JSON表示?

Answer 1:

基于Avro的规范 ,它看起来像只数组和地图具有不确定性的二进制编码。

地图看起来像他们非确定性编码有两个原因

  • 未指定的元素的顺序被
  • 块可以通过指定元件的数量,或在块中的字节的数目进行编码两种不同的方式要么。

数组看起来像他们的非确定性,因为编码

  • 该块可以通过指定元件的数量,或在块中的字节的数目进行编码两种不同的方式要么。

因此,对于没有数组或地图的任何模式,我认为二进制编码应该是确定性的。 所以我认为我们可以只通过继承创建一个确定性的编码器AvroCoder并覆盖AvroCoder.isDeterministic返回true。

AvroDeterministicCoder是我创造这样的编码器的第一次尝试。



Answer 2:

AvroCoder可以检查模式和类型被编码,并决定何时确定性。 它是在GitHub上添加提交#a806df 。

它包括用于确定性地编码阵列和地图时,底层集合是确定性顺序支持。



文章来源: Why isn't the AvroCoder deterministic?