AvroCoder.isDeterministic 返回 false。
为什么 AvroCoder 不是确定性的? Avro 记录不是总是被编码到同一个字节流中吗?
由于 Avro Coder 不是确定性的,Avro 记录不能用作 group by 操作的键。将 Avro 记录变成密钥的最佳方法是什么?我们应该只使用 Avro 记录的 json 表示形式吗?
基于 Avro 规范,看起来只有数组和映射具有非确定性二进制编码。
地图看起来像是非确定性编码,原因有两个
数组看起来像是非确定性编码,因为
因此,对于任何没有数组或映射的模式,我认为二进制编码应该是确定性的。所以我认为我们可以通过子类化 AvroCoder 并覆盖 AvroCoder.isDeterministic 以返回 true 来创建确定性编码器。
AvroDeterministicCoder是我第一次尝试创建这样的编码器。
从 Schema 生成的 Avro POJO 间接实现 Serialized。
这意味着,即使它是确定性的,它仍然不能用作密钥,例如对于
CoGroupByKey
或 GroupByKey
,因为 Beam 会直接拒绝任何可序列化类型,因为它是不确定的。