我有一个通过读取文件创建的 Apache 箭头数组。
std::shared_ptr<arrow::Array> array;
PARQUET_THROW_NOT_OK(reader->ReadColumn(0, &array));
有没有办法将其转换为 std::vector 或 C++ 中的任何其他 native 数组类型?
最佳答案
您可以使用 std::static_pointer_cast
投arrow::Array
例如,一个 arrow::DoubleArray
如果数组包含 double 数,则使用 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 上面的评论以及我自己玩的一个小例子中拼凑出来的,所以我不确定这是否是最好的方法,因为我对此很陌生。
关于c++ - 如何将箭头::数组转换为标准:: vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347028/