从单个 Arrow 文件中读取多个表
Reading mutliple tables from single Arrow file
我创建了一个包含多个 table 的 Arrow IPC 文件。如何使用 pyarrow
逐一阅读 table?有例子吗?
根据 Tabular Datasets 的文档,我只能读取文件中最后写的 table。
该文件是用 C++ 生成的,通过多次调用:
// table is a std::shared_ptr<arrow::Table> containing each
// time a table, multiple different schemas are used. filePath
// is an std::string with the destination file path.
// myFile is an std::shared_ptr<arrow::io::FileOutputStream>
// created with
// arrow::io::FileOutputStream::Open(params.outputPath,true)
// .ValueOrDie()
void arrowTableWrite() {
ARROW_ASSIGN_OR_RAISE(auto writer, arrow::ipc::MakeFileWriter(myFile->get(), table->schema()));
writer->WriteTable(*table);
writer->Close();
}
正在尝试读取创建的文件 python:
import pyarrow as pa
import sys
if __name__ == "__main__":
with pa.OSFile(sys.argv[1], 'rb') as source:
table = pa.ipc.open_file(source).read_all()
print(table)
以上打印:
pyarrow.Table
id: int32 not null
value: binary not null
我希望看到文件中包含的所有 table,我已验证数据已写入。
在与 Micah Kornfield 的评论中讨论后,澄清了 IPC file 格式不支持在同一文件中写入多个表。
要支持这一功能,可以使用 IPC stream 格式。具体来说,不是使用 MakeFileWriter
创建文件编写器,而是使用 MakeStreamWriter
创建的文件可以支持多个表,可能具有不同的架构,写入同一个 IPC 文件。
我创建了一个包含多个 table 的 Arrow IPC 文件。如何使用 pyarrow
逐一阅读 table?有例子吗?
根据 Tabular Datasets 的文档,我只能读取文件中最后写的 table。
该文件是用 C++ 生成的,通过多次调用:
// table is a std::shared_ptr<arrow::Table> containing each
// time a table, multiple different schemas are used. filePath
// is an std::string with the destination file path.
// myFile is an std::shared_ptr<arrow::io::FileOutputStream>
// created with
// arrow::io::FileOutputStream::Open(params.outputPath,true)
// .ValueOrDie()
void arrowTableWrite() {
ARROW_ASSIGN_OR_RAISE(auto writer, arrow::ipc::MakeFileWriter(myFile->get(), table->schema()));
writer->WriteTable(*table);
writer->Close();
}
正在尝试读取创建的文件 python:
import pyarrow as pa
import sys
if __name__ == "__main__":
with pa.OSFile(sys.argv[1], 'rb') as source:
table = pa.ipc.open_file(source).read_all()
print(table)
以上打印:
pyarrow.Table
id: int32 not null
value: binary not null
我希望看到文件中包含的所有 table,我已验证数据已写入。
在与 Micah Kornfield 的评论中讨论后,澄清了 IPC file 格式不支持在同一文件中写入多个表。
要支持这一功能,可以使用 IPC stream 格式。具体来说,不是使用 MakeFileWriter
创建文件编写器,而是使用 MakeStreamWriter
创建的文件可以支持多个表,可能具有不同的架构,写入同一个 IPC 文件。