AccueilBlogTest technique Rust pour la data : extensions Python, PyO3, performance
Guide recrutement data

Test technique Rust pour la data : extensions Python, PyO3, performance

Rust est de plus en plus utilisé dans l écosystème data (Polars, DataFusion, Lance). En entretien, un Data Engineer qui comprend pourquoi et comment Rust accélère Python se distingue.

Data Builder·Juin 2025·6 min de lecture·Data Engineer
Sommaire
  1. Rust dans l écosystème data
  2. PyO3 : extensions Python en Rust
  3. Exemple concret
  4. Quand utiliser Rust
  5. Rust dans Polars
  6. Alternatives à Rust
  7. Grille

1Pourquoi Rust dans l écosystème data

Question discriminante

Quels outils data majeurs sont écrits en Rust ? Pourquoi ce choix ?

2PyO3 : appeler du Rust depuis Python

Question discriminante

Comment créez-vous une extension Python en Rust avec PyO3 ?

// Cargo.toml [dependencies] pyo3 = { version = '0.20', features = ['extension-module'] } [lib] crate-type = ['cdylib'] // src/lib.rs use pyo3::prelude::*; // Fonction Rust appelable depuis Python #[pyfunction] fn fast_hash_many(values: Vec) -> Vec { // Traitement parallèle avec rayon use rayon::prelude::*; values.par_iter() .map(|v| format!("{:x}", md5::compute(v.as_bytes()))) .collect() } #[pymodule] fn fast_data(_py: Python, m: &PyModule) -> PyResult<()> { m.add_function(wrap_pyfunction!(fast_hash_many, m)?)?; Ok(()) }
## Python import fast_data results = fast_data.fast_hash_many(['email@example.com', 'autre@example.com']) # 50-100x plus rapide que le hashage Python pur pour de gros volumes

3Cas concret : accélérer un calcul Python

Question discriminante

Quand a-t-il du sens d écrire une extension Rust pour accélérer un pipeline Python ?

4Quand choisir Rust vs Cython vs Numba

Question discriminante

Quelles alternatives à Rust pour accélérer le Python ?

OutilCourbeGainsCas d usage
Rust + PyO3Élevée50-100xPerformance critique, code réutilisable
CythonMoyenne5-50xCode Python existant à accélérer
Numba JITFaible10-100xBoucles numériques simples (NumPy-like)
C Extension (ctypes)Élevée50-100xInterfacer avec des libs C existantes
Polars (Rust natif)Faible5-50x vs pandasTransformations de DataFrames

5Polars : tirer parti de Rust sans l écrire

Question discriminante

Comment exploitez-vous les capacités Rust de Polars sans écrire de Rust ?

import polars as pl # Polars utilise Rust en interne pour : # 1. Parallélisme automatique df = pl.scan_parquet('data/**/*.parquet') .filter(pl.col('amount') > 100) .group_by('region') .agg(pl.col('amount').sum()) .collect() # Rust parallélise automatiquement # 2. Extensions Rust via plugins import polars_plugin # hypothétique # 3. Lazy API = Rust query optimizer plan = df.lazy().explain() # voir le plan d exécution Rust # 4. Apache Arrow : zéro-copy entre Polars (Rust) et Python arrow_table = df.to_arrow() # zero-copy pandas_df = df.to_pandas() # via Arrow, très efficace

6Alternatives modernes à Rust pour la data

Question discriminante

Quels autres langages ou outils offrent des performances Rust-like pour la data ?

7Grille par niveau

NiveauMaitriseSignal GONO-GO
SeniorComprend pourquoi Rust est utilisé en data, tire parti de PolarsExplique le GIL et pourquoi Rust le contourne, utilise Polars intelligemmentNe sait pas ce qu est PyO3
ExpertA écrit du code Rust, a créé une extension PyO3A une extension Rust en production, compare les options d accélérationN a jamais regardé le code Rust de Polars

Vous recrutez un Data Engineer performance-oriented ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.