(
data_dir: impl AsRef<Path>,
num_files: usize,
num_rows_per_file: usize,
)
| 269 | } |
| 270 | |
| 271 | async fn generate_data( |
| 272 | data_dir: impl AsRef<Path>, |
| 273 | num_files: usize, |
| 274 | num_rows_per_file: usize, |
| 275 | ) -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> { |
| 276 | let absolute = std::env::current_dir().unwrap().join(data_dir); |
| 277 | let store = Arc::new(object_store::local::LocalFileSystem::new_with_prefix( |
| 278 | absolute, |
| 279 | )?); |
| 280 | |
| 281 | let columns = [ |
| 282 | ("A", DataType::Float64), |
| 283 | ("B", DataType::Float64), |
| 284 | ("C", DataType::Float64), |
| 285 | ("D", DataType::Boolean), |
| 286 | ("E", DataType::Utf8), |
| 287 | ("F", DataType::Utf8), |
| 288 | ("G", DataType::Utf8), |
| 289 | ("H", DataType::Utf8), |
| 290 | ("I", DataType::Utf8), |
| 291 | ("J", DataType::Utf8), |
| 292 | ("K", DataType::Utf8), |
| 293 | ]; |
| 294 | |
| 295 | for file_num in 1..=num_files { |
| 296 | println!("Generating file {file_num} of {num_files}"); |
| 297 | let data = columns.iter().map(|(column_name, column_type)| { |
| 298 | let column = random_data(column_type, num_rows_per_file); |
| 299 | (column_name, column) |
| 300 | }); |
| 301 | let to_write = RecordBatch::try_from_iter(data).unwrap(); |
| 302 | let path = object_store::path::Path::from(format!("{file_num}.parquet").as_str()); |
| 303 | let object_store_writer = ParquetObjectWriter::new(Arc::clone(&store) as _, path); |
| 304 | |
| 305 | let mut writer = |
| 306 | AsyncArrowWriter::try_new(object_store_writer, to_write.schema(), None)?; |
| 307 | writer.write(&to_write).await?; |
| 308 | writer.close().await?; |
| 309 | } |
| 310 | |
| 311 | Ok(()) |
| 312 | } |
| 313 | |
| 314 | fn random_data(column_type: &DataType, rows: usize) -> Arc<dyn Array> { |
| 315 | let mut rng = rand::rng(); |
no test coverage detected
searching dependent graphs…