Как конвертировать arrow::Array в std::vector?
У меня есть массив стрелок Apache, который создается путем чтения файла.
std::shared_ptr<arrow::Array> array;
PARQUET_THROW_NOT_OK(reader->ReadColumn(0, &array));
Есть ли способ преобразовать его в std::vector или любой другой тип массива в C++?
0 ответов
Вы можете использовать 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
функция.
Это именно то, что я собрал из этих ссылок, комментария Джонатана выше и сам поигрался с небольшим примером, поэтому я не уверен, что это лучший способ, поскольку я новичок в этом.