While not directly supported, It is achievable by using the aws sdk to read the s3 to an in memory object, then pass that off to the file reader.
use aws_sdk_s3::Region;
use aws_config::meta::region::RegionProviderChain;
use aws_sdk_s3::Client;
use std::borrow::Cow;
use polars::prelude::*;
#[tokio::main]
async fn main() {
let region = "region";
let bucket = "bucket";
let key = "key";
let region = Region::new(Cow::Borrowed(region));
let region_provider = RegionProviderChain::default_provider().or_else(region);
let config = aws_config::from_env().region(region_provider).load().await;
let client = Client::new(&config);
let req = client.get_object().bucket(bucket).key(key);
let res = req.clone().send().await.unwrap();
let bytes = res.body.collect().await.unwrap();
let bytes = bytes.into_bytes();
let cursor = std::io::Cursor::new(bytes);
let df = CsvReader::new(cursor).finish().unwrap();
println!("{:?}", df);
}
Cargo.toml
[dependencies]
aws-config = "0.49.0"
aws-sdk-s3 = "0.19.0"
polars = { version = "0.24.3", features = ["lazy", "parquet"] }
tokio = { version = "1.21.2", features = ["full"] }