Apache Beam/Dataflow:KVCoder 损坏用于解码的输入流

Apache Beam/Dataflow: KVCoder corrupting Inputstream for decode

提问人:user_1357 提问时间:2/4/2019 更新时间:2/4/2019 访问量:260

问:

我有自定义对象:,我通过 Avro 提供了编码器:,。CustomKeyCustomValueCustomKeyCoderCustomValueCoder

由于我需要按 KV[CustomKey, CustomValue] 分组,所以我注册了 .自定义编码器将输入/输出流包装到数据输入/输出流,并使用 Avro Datum Writer/Reader。KVCoder.of(new CustomKeyCoder, new CustomValueCoder)

我遇到的问题是在 KVCoder 的解码中,当我们尝试解码我得到的值部分时。如前所述,解码的关键部分工作正常,当输入流传递到解码值时会引发错误。KVCoder 对键和值重用相同的输入流,我猜键解码会读取整个流。为什么会这样?Avro 的使用有问题吗?KVForbidden IOException when reading from InputStream

下面是上面要展示的一些代码:

  //Coder
  override def decode(inputStream: InputStream): CustomValue = {
    val dataInputStream = new DataInputStream(inputStream)
    val id = dataInputStream.readShort
    underlying.decode(dataInputStream)
  }

 //Underlying
  override def decode(inputStream: InputStream): CustomValue = {
    val decoder = DecoderFactory.get().binaryDecoder(inputStream, null)
    val record = datumReader.read(null, decoder)
    CustomValue.decode(record)
  }
java google-cloud-dataflow iostream avro apache-beam

评论


答: 暂无答案