Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/skade

bench/examples/skade_reads_spark.rs

//! skade reads a **Spark-written** Iceberg table — interop + scan-speed demo for
//! the `skade vs Spark` container benchmark. Spark (knut-spark-iceberg, Hadoop
//! `lake` catalog) writes `lake.db.t`; we point skade at the resulting
//! `metadata.json` via an `iceberg::StaticTable` (no catalog needed) and scan it
//! through `skade::read_all`.
//!
//!   cargo run --release --example skade_reads_spark -- <…/db/t/metadata/vN.metadata.json>
use std::sync::Arc;
use std::time::Instant;

use skade::iceberg::io::{FileIOBuilder, LocalFsStorageFactory};
use skade::iceberg::table::StaticTable;
use skade::iceberg::TableIdent;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let path = std::env::args().nth(1).expect("usage: skade_reads_spark <metadata.json>");
    let uri = if path.starts_with("file://") { path } else { format!("file://{path}") };

    let file_io = FileIOBuilder::new(Arc::new(LocalFsStorageFactory)).build();
    let ident = TableIdent::from_strs(["db", "t"])?;
    let table = StaticTable::from_metadata_file(&uri, ident, file_io).await?.into_table();

    let t0 = Instant::now();
    let batches = skade::read_all(&table).await?;
    let dt = t0.elapsed();
    let rows: usize = batches.iter().map(|b| b.num_rows()).sum();
    println!(
        "skade read Spark-written Iceberg: {rows} rows in {:.3}s = {:.1} Mrows/s",
        dt.as_secs_f64(),
        rows as f64 / dt.as_secs_f64() / 1e6
    );
    Ok(())
}