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/