Как я могу получить последнее значение повторяющегося поля в каждой строке файла Parquet в Apache Стрелка? - PullRequest
0 голосов
/ 26 апреля 2020

Предположим, что я что-то делаю с каждой строкой файла Parquet, и у каждой строки есть поле с именем myList, которое повторяется, и строка. Как получить последнее значение в myList каждой строки?

В этом примере использует vector для хранения всех значений. Есть ли какой-нибудь удобный способ получить последнее значение повторяющегося поля в каждой строке напрямую?

Мой код такой:

auto chunk_array = table->GetColumnByName(myList);
auto list = std::static_pointer_cast<arrow::ListArray>(chunk_array->chunk(0));
for (int cur_row = 0; cur_row < table->num_rows(); ++cur_row) {
    //to get the last value of myList in current row
}

спасибо ~

1 Ответ

0 голосов
/ 29 апреля 2020

В конце концов я справился с кодом ниже:

auto chunk_array = table->GetColumnByName(myList);
auto list = std::static_pointer_cast<arrow::ListArray>(chunk_array->chunk(0));
int l_offset1, l_offset2, l_gap;
for (int cur_row = 0; cur_row < table->num_rows(); ++cur_row) {
    l_offset1 = list->value_offset(cur_row);
    l_offset2 = list->value_offset(cur_row + 1);
    l_gap = l_offset2 > l_offset1 ? l_offset2 - l_offset1 : 1;
    real_offset = real_offset + l_gap - 1;
    auto varr = std::static_pointer_cast<arrow::Int64Array>(list->values());
    varr->Value(real_offset);
    real_offset += 1;
}
...