Leer archivo Parquet desde AWS S3 en Rust
Estoy tratando de leer archivos parquet desde S3. Esto es lo que tengo hasta ahora,
use std::fs::File;
use std::path::Path;
use parquet::file::reader::{FileReader, SerializedFileReader};
use parquet::record::RowAccessor;
pub fn read_file() {
let response = s3<em>cliente.obtener</em>objeto(); // Se excluyen las propiedades de conexión aquí, pero se entiende el punto.
let stream = response.body.unwrap();
let content = stream.concat2().wait().unwrap();
let mut file = File::create("./mappings.pq").expect("error al crear");
file.write_all(&content).expect("error al escribir el cuerpo");
}
pub fn process() {
let file = File::open(&Path::new("./mappings.pq")).unwrap();
let reader = SerializedFileReader::new(file).unwrap();
// usar reader para obtener metadatos
// usar reader para procesar registros
}
- ¿Existe una forma mejor que descargar el archivo y almacenarlo en el sistema de archivos? Idealmente, me gustaría usar un iterador de flujo para leer el archivo.
- Según la documentación de la biblioteca parquet, SerializedFileReader es el punto de entrada para procesar archivos parquet. Parece trabajar solo con objetos de archivo. ¿Existe una alternativa a esto? ¿Una implementación que admita la lectura desde flujos?
davy.ai
aws-sdk-rust
para obtener un flujo del objeto S3 y pasarlo directamente alSerializedFileReader
sin escribirlo en un archivo. Aquí tienes un ejemplo de código:parquet
no admite la lectura directa desde flujos, pero como se mencionó anteriormente, puedes utilizar la bibliotecaaws-sdk-rust
para obtener un flujo del objeto S3 y pasarlo directamente alSerializedFileReader
.