MCPcopy Create free account
hub / github.com/apache/arrow-rs / consume_batch

Method consume_batch

parquet/src/arrow/array_reader/primitive_array.rs:155–209  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

153 }
154
155 fn consume_batch(&mut self) -> Result<ArrayRef> {
156 let target_type = &self.data_type;
157
158 // Convert physical data to equivalent arrow type, and then perform
159 // coercion as needed
160 let record_data = self
161 .record_reader
162 .consume_record_data()
163 .into_buffer(target_type);
164
165 let len = self.record_reader.num_values();
166 let nulls = self
167 .record_reader
168 .consume_bitmap_buffer()
169 .and_then(|b| NullBuffer::from_unsliced_buffer(b, len));
170
171 let array: ArrayRef = match T::get_physical_type() {
172 PhysicalType::BOOLEAN => Arc::new(BooleanArray::new(
173 BooleanBuffer::new(record_data, 0, len),
174 nulls,
175 )),
176 PhysicalType::INT32 => Arc::new(Int32Array::new(
177 ScalarBuffer::new(record_data, 0, len),
178 nulls,
179 )),
180 PhysicalType::INT64 => Arc::new(Int64Array::new(
181 ScalarBuffer::new(record_data, 0, len),
182 nulls,
183 )),
184 PhysicalType::FLOAT => Arc::new(Float32Array::new(
185 ScalarBuffer::new(record_data, 0, len),
186 nulls,
187 )),
188 PhysicalType::DOUBLE => Arc::new(Float64Array::new(
189 ScalarBuffer::new(record_data, 0, len),
190 nulls,
191 )),
192 PhysicalType::INT96 => Arc::new(Int64Array::new(
193 ScalarBuffer::new(record_data, 0, len),
194 nulls,
195 )),
196 PhysicalType::BYTE_ARRAY | PhysicalType::FIXED_LEN_BYTE_ARRAY => {
197 unreachable!("PrimitiveArrayReaders don't support complex physical types");
198 }
199 };
200
201 // Coerce the arrow type to the desired array type
202 let array = coerce_array(array, target_type)?;
203
204 // save definition and repetition buffers
205 self.def_levels_buffer = self.record_reader.consume_def_levels();
206 self.rep_levels_buffer = self.record_reader.consume_rep_levels();
207 self.record_reader.reset();
208 Ok(array)
209 }
210
211 fn skip_records(&mut self, num_records: usize) -> Result<usize> {
212 skip_records(&mut self.record_reader, self.pages.as_mut(), num_records)

Callers

nothing calls this directly

Calls 9

coerce_arrayFunction · 0.85
consume_record_dataMethod · 0.80
and_thenMethod · 0.80
consume_bitmap_bufferMethod · 0.80
consume_def_levelsMethod · 0.80
consume_rep_levelsMethod · 0.80
into_bufferMethod · 0.45
num_valuesMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected