如何在 Apache Arrow 的 Parquet 文件的每一行中获取重复字段的最后一个值?
How can I get the last value of the repeated field in each row of Parquet file in Apache Arrow?
假设我正在对 Parquet 文件的每一行执行某些操作,并且每一行都有一个名为 myList
的重复字符串字段。如何获取每行 myList
中的最后一个值?
This example 使用 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
}
谢谢~
我最终通过下面的代码解决了它:
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;
}
假设我正在对 Parquet 文件的每一行执行某些操作,并且每一行都有一个名为 myList
的重复字符串字段。如何获取每行 myList
中的最后一个值?
This example 使用 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
}
谢谢~
我最终通过下面的代码解决了它:
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;
}