无法将 `pyarrow` table 传递给 `arrow::Table`

Unable to pass `pyarrow` table to `arrow::Table`

我正在尝试通过 pybind11pyarrow table 传递给 c++。在这个例子中,我只是想打印从 python.

传递的 pyarrow table 的行数
#include <pybind11/pybind11.h>
#include <Python.h>
#include <iostream>
#include <arrow/python/pyarrow.h>

// Convert pyarrow table to native C++ object and print its contents
void print_table(PyObject* py_table)
{
    // convert pyobject to table
    auto status = arrow::py::unwrap_table(py_table);
    if (!status.ok())
    {
        std::cout << "Error converting pyarrow table to arrow table" << std::endl;
        return;
    }
    std::shared_ptr<arrow::Table> table = status.ValueOrDie();
    std::cout << "Table has " << table->num_rows() << " rows" << std::endl;
}

PYBIND11_MODULE(df_test, m)
{
    arrow::py::import_pyarrow();
    m.doc() = "Pyarrow Extensions";
    m.def("print_table", &print_table);
}

但是我收到以下错误:

 error: member access into incomplete type 'std::shared_ptr<arrow::Table>::element_type' (aka 'arrow::Table')
    std::cout << "Table has " << table->num_rows() << " rows" << std::endl;

如何修复此错误?

该错误告诉您 c++ class arrow::Table 缺少其完整定义。如果 class 在某些 header 中仅 声明 而不是 定义 .[=12=,则通常会出现这种情况]

要修复错误,您可能需要添加 #include 语句。 该定义可能在评论中建议的 header“arrow/table.h”中,但我不熟悉 Apache 箭头框架,因此您可能需要查看文档。