avro - 为什么 AvroCoder 不是确定性的?

标签 avro google-cloud-dataflow

AvroCoder.isDeterministic返回 false。

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

由于 Avro Coder 不是确定性的,Avro 记录不能用作 group by 操作的键。将 Avro 记录变成 key 的最佳方法是什么?我们应该只使用 Avro 记录的 json 表示形式吗?

最佳答案

基于Avro specification看起来只有数组和映射具有不确定的二进制编码。

由于两个原因, map 看起来像是不确定性编码的

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

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

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

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

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

关于avro - 为什么 AvroCoder 不是确定性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28129664/

相关文章:

hadoop - 无论如何要比较两个 avro 文件以查看数据中存在哪些差异?

apache-kafka - 接收器连接器寻找主题值架构而不是记录名称

java - Kafka Connect S3 接收器在加载 Avro 时抛出 IllegalArgumentException

google-cloud-dataflow - 如何删除gcloud Dataflow作业?

java - 根据时间戳过滤Dataflow中的有界数据

java - 如何从 GenericRecord 获取类型值?

apache-kafka - 使用 Flink 自定义 avro 消息反序列化

Python SDK Google Dataflow - 名称 'execfile' 未定义

google-cloud-platform - 计算一次 GroupBy,然后将其传递给 Google DataFlow (Python SDK) 中的多个转换

google-cloud-dataflow - CoGroupByKey 如何与discardingFiredPanes 配合使用?