Как конвертировать 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 функция.

Это именно то, что я собрал из этих ссылок, комментария Джонатана выше и сам поигрался с небольшим примером, поэтому я не уверен, что это лучший способ, поскольку я новичок в этом.

Другие вопросы по тегам