0

我正在尝试研究 Arrow 如何arrow::Array使用下面的 C++ API 将 python 列表转换为等价物。

#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,但是当我在调试控制台中询问它时,它似乎在内存中:

在此处输入图像描述

任何帮助表示赞赏。

4

1 回答 1

1

您需要通过调用 arrow_init_numpy() 来初始化 NumPy C API。看

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

于 2019-06-04T23:04:38.570 回答