Преобразование последовательности Python в Array Array с помощью C ++ API - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь выяснить, как Эрроу преобразует список Python в эквивалент arrow::Array, используя C ++ API ниже.

#include <memory>
#include <Python.h>
#include <string>
#include <iostream>
#include <arrow/memory_pool.h>
#include <arrow/python/python_to_arrow.h>


PyObject* clist(void)
{
    PyObject* lst = PyList_New(0);
    PyList_Append(lst, PyLong_FromLong(1));
    PyList_Append(lst, PyLong_FromLong(2));
    PyList_Append(lst, PyLong_FromLong(5));

    return lst;
}

int main()
{
    Py_Initialize();

    PyObject* list = clist();

    std::shared_ptr<arrow::ChunkedArray> carr;

    arrow::py::PyConversionOptions ops;
    ops.from_pandas = false;
    ops.pool = arrow::default_memory_pool(); 
    ConvertPySequence(list, ops, &carr);

    Py_Finalize();

}

Файл компилируется нормально, однако я получаю ошибку сегментации на arrow/cpp/src/arrow/python/iterators.h строка 44 на PyCheck_Array.

Ошибка в моем отладчике EXC_BAD_ACCESS, однако, когда я опрашиваю его в консоли отладки, он появляется в памяти:

enter image description here

Любая помощь приветствуется.

1 Ответ

1 голос
/ 05 июня 2019

Вам нужно инициализировать API NumPy C, вызывая arrow_init_numpy (). См

https://github.com/apache/arrow/blob/master/cpp/src/arrow/python/util/test_main.cc#L24

...