我有一个通过读取文件创建的 Apache 箭头数组。
std::shared_ptr<arrow::Array> array;
PARQUET_THROW_NOT_OK(reader->ReadColumn(0, &array));
有没有办法将它转换为 std::vector 或 C++ 中的任何其他本机数组类型?
我有一个通过读取文件创建的 Apache 箭头数组。
std::shared_ptr<arrow::Array> array;
PARQUET_THROW_NOT_OK(reader->ReadColumn(0, &array));
有没有办法将它转换为 std::vector 或 C++ 中的任何其他本机数组类型?
例如,如果数组包含双精度数,则可以使用std::static_pointer_cast
转换为,然后使用该函数获取特定索引处的值。例如:arrow::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
函数而不是函数来访问 an 中的字符串Value
。
这只是我从这些链接、johnathan 上面的评论以及我自己玩的一个小例子中拼凑出来的,所以我不确定这是否是最好的方法,因为我对此很陌生。