Как писать в файл пера Apache Arrow на C ++?

Каков минимальный пример кода C ++, который записывает данные в формат Feather? что поддерживает Apache Arrow? Позднее этот файл будет использоваться для чтения mmapped из кода Python.

Предположим, у нас есть экземпляр arrow::Table, как написать содержимое его в перьевой файл?


person P Shved    schedule 24.07.2020    source источник


Ответы (1)


Хорошо, это совсем не задокументировано на сайте документации 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
comment
это очень помогло мне при попытке написать таблицу из C ++. У вас есть случайно пример того, как прочитать файл с перьями C ++? Это действительно легко с python, в соответствии с вашим примером, но я не могу найти нигде пример, чтобы прочитать его с C ++ - person dau_sama; 10.05.2021