Chargement en cours

PySpark : Comment traiter efficacement un fichier massif de 100 Go


🔥 Introduction

Dans le monde du Big Data, il est fréquent de devoir manipuler des fichiers massifs, parfois de plus de 100 Go. Cela peut rapidement devenir un cauchemar si ce n’est pas bien maîtrisé : surcharge mémoire, lenteur extrême, voire crashs complets de votre cluster Spark.

Or, Apache Spark, malgré sa puissance, n’est pas magique : une mauvaise configuration ou un usage naïf peut entraîner un traitement inefficace, gourmand en ressources et difficile à déboguer.

Ce tutoriel vise à vous montrer une méthode fiable et scalable pour lire un fichier volumineux avec PySpark, en :

  • Évitant de saturer votre mémoire,
  • Optimisant la parallélisation des tâches,
  • Et structurant votre lecture et vos transformations de manière progressive.

❗️Pourquoi c’est un défi ?

Lorsque vous lisez un fichier de plusieurs dizaines de Go :

  • PySpark peut essayer de tout charger en mémoire, ce qui dépasse la capacité du driver.
  • Le fichier peut être mal partitionné, entraînant une exécution déséquilibrée (certaines tâches longues, d’autres courtes).
  • Des formats comme CSV ou JSON sont non-optimisés pour le Big Data (contrairement à Parquet ou ORC).
  • Des opérations comme .collect() ou .coalesce(1) peuvent tuer votre application s’ils sont mal utilisés.

🎯 Objectif de ce tutoriel

Apprendre à lire efficacement un fichier de 100 Go ou plus avec PySpark, tout en :

  • contrôlant la mémoire utilisée,
  • évitant les erreurs classiques,
  • adoptant les bonnes pratiques de performances,
  • et en gardant la stabilité de votre environnement Spark.

Souhaites-tu aussi que je rédige une conclusion ou une version résumée de l’intro pour Medium ou LinkedIn ?


✅ Prérequis

  • Apache Spark installé (localement ou sur un cluster)
  • Python et PySpark installés
  • Accès à un fichier volumineux (CSV, JSON, Parquet…)
  • IDE ou Notebook (Jupyter, VSCode, etc.)

🧱 Étapes détaillées

1. ⚙️ Configuration de SparkSession avec paramètres optimisés

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("ReadLargeFile") \
    .config("spark.driver.memory", "4g") \
    .config("spark.executor.memory", "8g") \
    .config("spark.sql.shuffle.partitions", "800") \
    .config("spark.default.parallelism", "800") \
    .getOrCreate()

🔸 Ajustez les valeurs de memory, shuffle.partitions et parallelism selon la taille de votre cluster.


2. 📂 Lire le fichier en partitionnant manuellement

Il est conseillé de contrôler le nombre de partitions pour éviter de tout charger en mémoire d’un seul coup.

df = spark.read.csv("hdfs://path/to/your/largefile.csv", header=True, inferSchema=True)
df = df.repartition(800)  # adapte le nombre selon ton cluster

🎯 Objectif : plus de partitions = traitement distribué = moins de surcharge mémoire.


3. 🔍 Lire une fraction du fichier (optionnel)

Si vous voulez tester votre code sur un sous-ensemble avant de traiter tout le fichier :

sample_df = df.limit(100000)  # ou df.sample(fraction=0.01)
sample_df.show()

4. 🧼 Nettoyage et transformation légère

Effectuer des opérations légères au début pour ne pas provoquer des shuffles inutiles :

df = df.dropna()
df = df.withColumnRenamed("old_column", "new_column")

5. 💾 Écriture optimisée

Évitez d’écrire en un seul fichier (coalesce(1)), préférez plusieurs fichiers pour paralléliser l’écriture :

df.write.mode("overwrite").parquet("hdfs://path/to/output/")

🧠 Conseils avancés

  • Utilisez Parquet ou ORC plutôt que CSV : ces formats sont compressés et plus rapides à lire.
  • Si votre fichier est sur S3, HDFS ou un système distribué, assurez-vous que Spark y accède sans copie locale.
  • Surveillez l’utilisation mémoire avec l’UI Spark (http://localhost:4040 en local).

📚 Résumé

ÉtapeAction
1️⃣Configurer Spark avec des ressources suffisantes
2️⃣Lire avec un nombre élevé de partitions
3️⃣Travailler sur un échantillon au début
4️⃣Nettoyer et transformer avec prudence
5️⃣Écrire en format Parquet, partitionné

Share this content:

Laisser un commentaire