在 C++ 中将 Python 序列转换为箭头数组 API
Converting Python seqence to arrow Array via C++ API
我正在尝试研究 Arrow 如何使用下面的 C++ API 将 python 列表转换为等效的 arrow::Array
。
#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();
}
文件编译正常,但是我在 PyCheck_Array
的 arrow/cpp/src/arrow/python/iterators.h
第 44 行遇到分段错误。
我的调试器中的错误是 EXC_BAD_ACCESS
,但是当我在调试控制台中询问它时,它似乎存在于内存中:
感谢任何帮助。
您需要通过调用 arrow_init_numpy() 来初始化 NumPy C API。见
https://github.com/apache/arrow/blob/master/cpp/src/arrow/python/util/test_main.cc#L24
我正在尝试研究 Arrow 如何使用下面的 C++ API 将 python 列表转换为等效的 arrow::Array
。
#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();
}
文件编译正常,但是我在 PyCheck_Array
的 arrow/cpp/src/arrow/python/iterators.h
第 44 行遇到分段错误。
我的调试器中的错误是 EXC_BAD_ACCESS
,但是当我在调试控制台中询问它时,它似乎存在于内存中:
感谢任何帮助。
您需要通过调用 arrow_init_numpy() 来初始化 NumPy C API。见
https://github.com/apache/arrow/blob/master/cpp/src/arrow/python/util/test_main.cc#L24