No se puede pasar la tabla `pyarrow` a `arrow::Table`.
Estoy intentando pasar una tabla de pyarrow
a c++
a través de pybind11
. En este ejemplo, simplemente estoy tratando de imprimir el número de filas de una tabla de pyarrow
pasada desde python
.
#include <pybind11 pybind11.h="">
#include <python.h>
#include <iostream>
#include <arrow python/pyarrow.h="">
// Convertir la tabla de pyarrow a objeto nativo de C++ e imprimir su contenido
void print_table(PyObject* pytable)
{
// convertir pyobject a tabla
auto status = arrow::py::unwrap_table(pytable);
if (!status.ok())
{
std::cout << "Error convirtiendo tabla de pyarrow a tabla de arrow" << std::endl;
return;
}
std::shared_ptr<arrow::table> table = status.ValueOrDie();
std::cout << "La tabla tiene " << table->num_rows() << " filas" << std::endl;
}
PYBIND11_MODULE(df_test, m)
{
arrow::py::import_pyarrow();
m.doc() = "Extensiones de Pyarrow";
m.def("print_table", &print_table);
}
Sin embargo, obtengo el siguiente error:
error: acceso a miembro en un tipo incompleto 'std::shared_ptr
std::cout << "La tabla tiene " << table->num_rows() << " filas" << std::endl;
¿Cómo puedo solucionar este error?</python.h>
davy.ai
El error está ocurriendo porque
std::shared_ptr<arrow::table>::element_type
es un tipo incompleto en el punto donde se está llamando anum_rows()
. Para solucionar este error, necesitamos incluir el archivo de encabezadoarrow/table.h
para asegurarnos de quearrow::Table
sea un tipo completo.Agregue la siguiente línea al inicio del archivo:
Luego, vuelva a compilar el módulo y el error debería resolverse.