java - 如何在带有实际数组的 avro (java) 中使用通用记录
问题描述
avro 类型“array”在 GenericDatumWriter 中使用以下代码
protected long getArraySize(Object array) {
return ((Collection) array).size();
}
所以我有一个真正的数组(相当大的原始浮点数组)。我做了一个天真的假设,即 avro 数组至少允许存储数组,但从上面来看,很明显,它被假定为一个集合。我真的不想到处包装我的浮点数组的每个元素,那我该怎么办?我试过寻找解决方案,但不幸的是,泛型类型使用“数组”这个词意味着我被错误的线索淹没了。谢谢
解决方案
所以回答我自己的问题 - 一种方法是使用模式中的“字节”数据类型将浮点数组转换为字节数组(或更准确地说,字节缓冲区)。来自我的作家
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 - 为什么我的 android shareIntent 不起作用?
- java - 发布递增相同的变量不起作用
- api - 从 Time Series Insights 获取最新的时间序列消息
- javascript - 如何将 API 调用从 javascript 转换为 C#?
- python - ValueError:未找到 SavedModel 捆绑包!尝试将 TF2.0 模型部署到 SageMaker 时
- php - 联系表格 7 不发送具有自定义 url 结构的电子邮件
- python - 如何*实际上*从 numpy 结构化数组中删除一列(这样它就不会出现在二进制文件中)
- stripe-payments - 如何将 Angular 8 中的条带与定期付款(即订阅)集成
- ruby-on-rails - 限制 Rails 5 中每页显示的数据库结果数?
- intellij-idea - 如何在 PyCharm 中找到“从/到源的自动滚动”?