gpt4 book ai didi

python - 如何在 python 中的 PyArrow 和 C++ 中的 Arrow 之间进行接口(interface)时将 PyArrow 表转换为 Arrow 表

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:05 63 4
gpt4 key购买 nike

我有一个针对 Apache Arrow C++ 库构建的 C++ 库,使用 Pybind 绑定(bind)到 python。我希望能够用 C++ 编写一个函数来获取用 PyArrow 构造的表,例如:

void test(arrow::Table test);

传入 PyArrow 表,如:

tab = pa.Table.from_pandas(df)
mybinding.test(tab)

如果我像上面那样做一个简单的函数,我会得到:

TypeError: arrow_test(): incompatible function arguments. The following argument types are supported:
1. (arg0: arrow::Table) -> None

Invoked with: pyarrow.Table

我还尝试编写一个接受 py::object 的函数和 .cast<arrow::Table>()但我无法进行转换:

RuntimeError: Unable to cast Python instance to C++ type (compile in debug mode for details)

有人知道如何让它工作吗?

最佳答案

您必须使用 arrow/python/pyarrow.h header 中提供的功能。此 header 是自动生成的,以支持将 Cython pyarrow.Table 对象解包为 C++ arrow::Table 实例。构建并链接到 libarrow.so 就足够了。它还需要加载 pyarrow python 包,但这只是一个运行时,而不是编译时依赖项。

// header that 
#include <arrow/python/pyarrow.h>

// Ensure that the Python module was loaded
arrow::py::import_pyarrow();

PyObject* pyarrow_table = …
// With pybind11 you can also use
// pybind11::object pyarrow_table = …

// Convert PyObject* to native C++ object
std::shared_ptr<Table> table = unwrap_pyarrow_table(pyarrow_table);

关于python - 如何在 python 中的 PyArrow 和 C++ 中的 Arrow 之间进行接口(interface)时将 PyArrow 表转换为 Arrow 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57863751/

63 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com