我有一个通过读取文件创建的Apache箭头数组。

std::shared_ptr<arrow::Array> array;
PARQUET_THROW_NOT_OK(reader->ReadColumn(0, &array));

有没有一种方法可以将其转换为std::vector或C++中的任何其他本机数组类型?

最佳答案

如果数组包含 double 数,则可以使用std::static_pointer_castarrow::Array强制转换为arrow::DoubleArray,然后使用Value函数获取特定索引处的值。例如:

auto arrow_double_array = std::static_pointer_cast<arrow::DoubleArray>(array);
std::vector<double> double_vector;
for (int64_t i = 0; i < array->length(); ++i)
{
    double_vector.push_back(arrow_double_array->Value(i));
}

在此示例中,请参见ColumnarTableToVector函数的后半部分:
https://arrow.apache.org/docs/cpp/examples/row_columnar_conversion.html。在该示例中,table->column(0)->chunk(0)std::shared_ptr<arrow::Array>

要了解更多信息,我发现在这里单击继承图树的各个部分很有用:https://arrow.apache.org/docs/cpp/classarrow_1_1_flat_array.html。例如,使用arrow::StringArray函数而不是GetString函数访问Value中的字符串。

这就是我从这些链接,上面的johnathan的评论以及我自己的一个小示例中拼凑而成的内容,因此我不确定这是否是最好的方法,因为我对此很陌生。

09-10 03:48
查看更多