为什么AvroCoder不确定?

时间:2015-01-24 20:03:33

标签: avro google-cloud-dataflow

AvroCoder.isDeterministic返回false。

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

由于Avro Coder不具有确定性,因此Avro记录不能用作按操作分组的密钥。将Avro记录转换为密钥的最佳方法是什么?我们应该只使用Avro记录的json表示吗?

2 个答案:

答案 0 :(得分:2)

基于Avro specification,看起来只有阵列和地图具有非确定性二进制编码。

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

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

阵列看起来像是非确定性编码的,因为

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

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

AvroDeterministicCoder是我创建这样一个程序员的第一次尝试。

答案 1 :(得分:1)

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

当底层集合具有确定性顺序时,它包括对确定性地编码数组和映射的支持。