在 Rust 中读取 Apache Arrow IPC 文件时出现 IoError“无法填充整个缓冲区”

问题描述

我正在尝试将二进制 Arrow 文件读入 Rust,但出现错误 IoError("Failed to fill whole buffer")。我正在使用 Arrow 3。我知道可以使用 ipc::reader::FileReader,但在我的应用程序中,我实际上已经在内存中存储了数据。

use arrow::ipc;
use std::fs;

fn main() {
    println!("Length: {}",try_main().unwrap());
}

fn try_main() -> std::io::Result<usize> {
    let data = fs::read("flights-10k.arrow")?;

    println!("Size of the data: {}",data.len());

    let reader = ipc::reader::StreamReader::try_new(&data as &[u8]).unwrap();
    return Ok(reader.schema().fields().len());
}

在我的货物文件

[dependencies]
arrow = "3.0.0"

解决方法

添加光标似乎可以让我改用文件阅读器。

let cursor = Cursor::new(&data as &[u8]);
let reader = ipc::reader::FileReader::try_new(cursor).unwrap();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...