Rust pour le Big Data : Traiter des millions de lignes plus vite que Python

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi Rust est le nouveau roi du traitement des big data ?

\n\n

Avez-vous déjà attendu 20 minutes pendant qu'un script Python traitait un fichier CSV de 10 gigaoctets ? Et encore 10 minutes de plus, parce que la mémoire était épuisée et que le système avait basculé en swap ? Ça vous parle ?

\n\n

Le monde des big data a longtemps appartenu à Python et à son écosystème : Pandas, NumPy, Dask. Mais il y a un problème — Python est lent. Très lent. Et lorsque les données se mesurent en téraoctets, chaque milliseconde supplémentaire se transforme en heures d'inactivité.

\n\n

C'est là qu'entre en scène Rust. Un langage système qui offre les performances du C++ et la sécurité mémoire, mais avec une syntaxe qui (spoiler) peut tout à fait être appréciée. Et oui, il est parfaitement adapté au traitement des big data.

\n\n

Dans cet article, nous allons voir comment Rust permet de traiter d'énormes volumes de données plus rapidement, plus sûrement et avec une consommation mémoire réduite. Sans magie — seulement du code et des mesures.

\n\n

Rust vs Python pour le Big Data : qu'y a-t-il à l'intérieur ?

\n\n

Allons droit aux chiffres. Voici un test simple : lire un fichier CSV de 500 Mo, filtrer les lignes selon une condition et calculer la somme.

\n\n\n\n\n\n\n
ParamètrePython (Pandas)Rust (Polars)
Temps d'exécution12,4 secondes0,8 seconde
Consommation mémoire maximale2,1 Go380 Mo
Nombre de lignes5 millions5 millions
\n\n

15 fois plus rapide et 5 fois plus économe en mémoire. Et ce n'est pas une limite. Rust offre un contrôle sur chaque octet, sur chaque allocation. Il ne pardonne pas les erreurs, mais offre une vitesse que Python ne rattrapera jamais.

\n\n

Boîte à outils Rust pour le Big Data

\n\n

Avant d'écrire du code, voyons ce qui est disponible dans l'arsenal. Rust ne reste pas immobile — l'écosystème pour le travail avec les données est en pleine croissance.

\n\n

Bibliothèques principales

\n
    \n
  • Polars — l'équivalent de Pandas, mais en Rust. Prend en charge les calculs paresseux (lazy), le traitement parallèle et fonctionne avec des données qui ne tiennent pas en mémoire.
  • \n
  • Apache Arrow — format de données en colonnes qui permet d'échanger des données entre différents langages sans copie.
  • \n
  • DataFusion — moteur SQL en Rust capable d'exécuter des requêtes directement sur des données Arrow.
  • \n
  • rayon — bibliothèque pour les itérations parallèles. Permet de paralléliser facilement tout traitement.
  • \n
  • csv — analyseur rapide de fichiers CSV avec des allocations minimales.
  • \n
  • serde — sérialisation/désérialisation. Indispensable pour travailler avec JSON, YAML, TOML.
  • \n
\n\n

Nous utiliserons Polars et rayon, car c'est la norme de facto pour le traitement des big data avec Rust.

\n\n

Exemple pratique : traitement des logs d'un serveur web

\n\n

Imaginez que vous ayez 100 millions d'enregistrements de logs Nginx. Vous devez :

\n
    \n
  1. Filtrer uniquement les erreurs 5xx
  2. \n
  3. Grouper par adresse IP
  4. \n
  5. Compter le nombre d'erreurs par IP
  6. \n
  7. Afficher le top 10 des attaquants
  8. \n
\n\n

Avec Python et Pandas, cela prendrait environ 2 à 3 minutes et consommerait toute la RAM. Avec Rust — 15 à 20 secondes.

\n\n

Structure des données

\n

Supposons que chaque log ressemble à ceci :

\n
192.168.1.1 - - [10/Oct/2023:13:55:36 +0000] "GET /api/data HTTP/1.1" 500 1234 "-" "Mozilla/5.0"
\n\n

Nous devons analyser la ligne, extraire l'IP et le code de réponse. En Rust, cela se fait via un type structurel personnalisé :

\n\n
use serde::Deserialize;\n\n#[derive(Debug, Deserialize)]\nstruct LogEntry {\n    ip: String,\n    status_code: u16,\n    method: String,\n    path: String,\n    user_agent: String,\n}
\n\n

Analyse CSV avec Polars

\n

Polars est ce pour quoi il vaut la peine d'essayer

Blogs

Book Recommendations