>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Rust

Delta Lake Zonder JVM en PySpark in Rust- en Python-projecten

Iedereen die heeft geprobeerd het Delta Lake-formaat te gebruiken in kleine services of scripts, komt al snel voor een harde realiteit te staan. Om simpelweg een paar gigabyte aan transactielogbestanden te lezen, moet je Apache Spark meeslepen, en daarmee de zware JVM-infrastructuur. In grote dataplatforms is dit gerechtvaardigd, maar voor een lokale applicatie, een achtergrondmicroservice of een AWS Lambda serverless functie voelt zo'n oplossing veel te omslachtig.

Ontwikkelaars uit de Delta Lake-community besloten dit gat te dichten. Ze creëerden het delta-rs project — een native bibliotheek voor het werken met Delta Lake in Rust, met officiële bindings voor Python.

delta-rs logo

Waarom Nog Een Data-bibliotheek

Het Delta Lake-formaat is geweldig omdat het de belangrijkste pijnpunten van open file storage oplost. Het voegt een ACID-transactielogboek toe bovenop Parquet-bestanden, wijzigingsgeschiedenis met de mogelijkheid om terug te rollen naar vorige versies (time travel), en strikte schema-afdwinging.

De klassieke stack rond Delta Lake is historisch gezien gekoppeld aan Scala en Java. Als je primaire stack Rust of lichtgewicht Python is zonder zware frameworks zoals PySpark, waren je opties beperkt voordat delta-rs verscheen.

De bibliotheek biedt low-level API's voor Rust en een high-level interface voor Python. Nu kun je data met ACID-garanties naar een S3-bucket of lokale schijf schrijven in slechts een paar regels code zonder JVM-processen te starten.

Snel Aan de slag met Python en Rust

De Python-pakketinterface deltalake is ontworpen zodat ontwikkelaars niets opnieuw hoeven te leren. Het integreert eenvoudig met vertrouwde analysebibliotheken — Pandas, Arrow of Polars.

Het schrijven en lezen van een tabel in Python ziet er heel vertrouwd uit:

import pandas as pd
from deltalake import DeltaTable, write_deltalake

# Создаем тестовый датафрейм и сохраняем его в формате Delta
df = pd.DataFrame({"id": [1, 2], "value": ["foo", "boo"]})
write_deltalake("./data/delta", df)

# Считываем данные обратно
dt = DeltaTable("./data/delta")
df_read = dt.to_pandas()

assert df.equals(df_read)

Een interessant detail: je kunt dezelfde tabel direct openen vanuit een Rust-applicatie. Er is geen handmatige metadata-assemblage vereist. De bibliotheek zal automatisch de JSON-commit-log in de _delta_log-directory parsen.

Voorbeeld van het lezen van tabelmetadata in Rust:

use deltalake::{open_table, DeltaTableError};
use url::Url;

#[tokio::main]
async fn main() -> Result<(), DeltaTableError> {
    let delta_path = Url::from_directory_path("/abs/data/delta").unwrap();
    let table = open_table(delta_path).await?;

    let files: Vec<_> = table.get_file_uris()?.collect();
    println!("{files:?}");

    Ok(())
}

Onder de Motorkap en Integraties

Hoge snelheid en laag geheugengebruik zijn geen toeval. Het project is gebouwd op de Apache Arrow-engine en de DataFusion-vectorengine. Rust wordt gebruikt voor veilig geheugenbeheer en parallelle I/O bij het werken met cloudopslag.

De bibliotheek kan direct werken met AWS S3, Google Cloud Storage, Azure Blob Storage en het lokale bestandssysteem.

Dankzij de gedeelde basis op Rust en Arrow is delta-rs snel onderdeel geworden van het moderne dataverwerkings-ecosysteem. Populaire tools werken er direct mee:

  • Polars gebruikt delta-rs voor direct lezen en schrijven van Delta-tabellen.
  • DuckDB kan analytische SQL-queries uitvoeren op Delta-logs.
  • Da, Dask en Ray gebruiken deze module voor gedistribueerde dataverwerking in Python.
  • AWS SDK for Pandas gebruikt het als de native engine voor het Delta-formaat.

Praktische Gebruiksscenario's

In welke situaties wint delta-rs het van de klassieke aanpak?

Het eerste geval is microservice-architectuur. Bijvoorbeeld, je hebt een Rust- of Python-service die gebeurtenissen verzamelt van een message queue en elke vijf minuten batches moet toevoegen aan een datastore. Een Spark-cluster opstarten hiervoor is duur en complex om te onderhouden. Met delta-rs linkt de service simpelweg de bibliotheek en schrijft data direct naar S3.

Het tweede geval is lichtgewicht ETL-pipelines. Als je datavolumes worden gemeten in tientallen of honderden gigabytes, zal Polars gecombineerd met delta-rs deze op één instantie sneller verwerken dan een PySpark-cluster kan worden geprovisioneerd.

Het derde geval is Serverless-architectuur. In AWS Lambda-functies met strikte limieten op afbeeldingsgrootte en opstarttijd is het inpassen van een Java-omgeving problematisch. Een gecompileerd Rust-binary met delta-rs start in milliseconden.

Heeft het project beperkingen? Ja, de Delta Lake-specificatie is vrij uitgebreid en wordt constant bijgewerkt door Databricks. Sommige zeldzame of nieuwe formaatfuncties worden in delta-rs met een lichte vertraging geïmplementeerd. Voordat je complexe bewerkingen zoals MERGE met specifieke voorwaarden gebruikt, moet je de tabel met ondersteunde functies in de projectdocumentatie raadplegen.

Conclusie

Het delta-io team heeft uitstekend werk geleverd. De native Rust-bibliotheek heeft lichtheid teruggebracht in het werken met het Delta Lake-formaat.

Als je transactionaliteit, data-versioning en betrouwbare opslag bovenop Parquet nodig hebt, maar je wilt niet omgaan met Java-infrastructuur, geef delta-rs zeker een kans. Je kunt het pakket in Python installeren met het commando pip install deltalake, en het toevoegen aan een Rust-project via cargo add deltalake.

Gerelateerde projecten