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