java - 如何将 avro (java) 中的通用记录与实际数组一起使用

标签 java arrays avro

avro 类型“array”在 GenericDatumWriter 中使用以下代码

  protected long getArraySize(Object array) {
    return ((Collection) array).size();
  }

所以我有一个真正的数组(相当大的原始 float 组)。 我天真的假设 avro 数组至少允许存储数组,但从上面可以清楚地看出,它被假定为一个集合。 我真的不想到处包装 float 组的每个元素,那么我能做什么呢?我尝试寻找解决方案,但不幸的是,使用“数组”一词来表示通用类型意味着我被错误的线索所淹没。 谢谢

最佳答案

因此,回答我自己的问题 - 一种方法是使用模式中的“字节”数据类型将 float 组转换为字节数组(或更准确地说,字节缓冲区)。 来 self 的作家

    val bb = ByteBuffer.allocate(value.length * 4)
    value.indices.foreach { i => bb.putFloat(value(i))}
    bb.rewind()

和读者

    case bb: ByteBuffer =>
      val flts = bb.asFloatBuffer()
      val lim = flts.limit()
      val out = Array.ofDim[Float](lim)
      0.until(lim).foreach( i => out(i) = flts.get(i))
      out
    }

注意,我无法找到一种方法来避免每种情况下的副本 - asFloatBuffer 不允许 FloatBuffer 上的后续 .array

关于java - 如何将 avro (java) 中的通用记录与实际数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58520540/

相关文章:

java - RequestParam as Set in 单个参数

java - 在哪里可以找到 System.out.println() 的日志?

javascript - 未选中单选按钮时禁用复选框数组

arrays - Ruby - 如何删除哈希数组中的重复项?

java - 使用 Orika Mapper 进行映射时,类型为 List<Map<String, String>> 的字段丢失内容

arrays - GOLang 解码 JSON(未拾取简单数组)

python - 如何使用 Avro 处理我无法搜索的流?

java - 通过 Apache Kafka 发送的 Python 处理的 Avro 格式数据在 Apache Camel/Java 处理器中进行反序列化时不会产生相同的输出

java - GenericRecord 的 Avro 架构 : Be able to leave blank fields

java - 如何将现有的 SQLite3 数据库导入 Room?