如何将arrow :: Array转换为std :: vector?

时间:2018-11-17 00:21:04

标签: c++ arrays vector apache-arrow

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

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

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

1 个答案:

答案 0 :(得分:1)

如果数组包含双精度数,则可以使用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的评论以及我自己玩的一个小例子中拼凑而成的内容,因此我不确定这是否是最好的方法,因为我对此很陌生