Хорошо, это совсем не задокументировано на сайте документации Arrow, поэтому я собрал его вместе из исходного кода Arrow. Надеюсь, кто-то может порекомендовать более простой / более официальный метод.
Я использовал пример кода стрелки для создания arrow::Table
, а затем использовал следующее, чтобы написать с C ++:
#include "arrow/io/api.h"
#include "arrow/ipc/feather.h"
// ...
std::shared_ptr<arrow::Table> table = //...;
std::shared_ptr<FileOutputStream> file;
ARROW_ASSIGN_OR_RAISE(file, FileOutputStream::Open(filename, /*append=*/true));
ARROW_RETURN_NOT_OK(arrow::ipc::feather::WriteTable(*table, file.get()));
ARROW_RETURN_NOT_OK(file->Close());
и следующее для чтения из Python.
import pyarrow as pa
import pyarrow.feather as feather
with pa.memory_map('myfile.feather', 'r') as stream:
table = feather.read_feather(stream)
print(table)
Вывод кода Python был:
$ python read_feather.py
id cost cost_components
0 1 1.0 [1.0]
1 2 2.0 [1.0, 2.0]
2 3 3.0 [1.0, 2.0, 3.0]
person
P Shved
schedule
24.07.2020