1

AvroCoder.isDeterministic返回 false。

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

由于 Avro 编码器不是确定性的,因此 Avro 记录不能用作分组操作的键。将 Avro 唱片变成钥匙的最佳方法是什么?我们应该只使用 Avro 记录的 json 表示吗?

4

2 回答 2

2

根据Avro 规范,看起来只有 Arrays 和 Maps 具有不确定的二进制编码。

地图看起来像是非确定性编码的,原因有两个

  • 未指定元素的顺序
  • 通过指定块中的元素数或字节数,可以以两种不同的方式对块进行编码。

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

  • 通过指定块中的元素数或字节数,可以通过两种不同的方式对块进行编码。

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

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

于 2015-01-25T00:09:41.333 回答
1

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

当基础集合是确定性顺序时,它包括对确定性编码数组和映射的支持。

于 2015-10-01T00:18:06.697 回答