Apache Spark est un moteur d'analyse unifié open-source pour le traitement de données à grande échelle. Il fournit une interface pour programmer des clusters avec un parallélisme de données implicite et une tolérance aux pannes. Développé à l'origine au laboratoire AMPLab de l'Université de Californie à Berkeley à partir de 2009, le code de Spark a été donné à la Apache Software Foundation en 2013, qui le maintient depuis.
La base architecturale de Spark est le jeu de données distribué résilient (RDD), un multi-ensemble en lecture seule d'éléments de données répartis sur un cluster de machines, maintenu de manière tolérante aux pannes. L'API DataFrame a été publiée comme une abstraction au-dessus du RDD, suivie de l'API Dataset. Dans Spark 1.x, le RDD était l'API principale, mais à partir de Spark 2.x, l'utilisation de l'API Dataset est encouragée, bien que l'API RDD ne soit pas dépréciée. La technologie RDD sous-tend toujours l'API Dataset.
Spark et ses RDD ont été développés en 2012 en réponse aux limitations du paradigme de calcul en cluster MapReduce, qui impose une structure de flux de données linéaire aux programmes distribués. Les programmes MapReduce lisent les données d'entrée depuis le disque, appliquent une fonction aux données, réduisent les résultats et stockent les résultats de réduction sur le disque. Les RDD de Spark fonctionnent comme un ensemble de travail pour les programmes distribués, offrant une forme délibérément restreinte de mémoire partagée distribuée.
À l'intérieur de Spark, le flux de travail est géré comme un graphe acyclique dirigé (DAG). Les nœuds représentent les RDD, tandis que les arêtes représentent les opérations sur les RDD. Spark facilite à la fois les algorithmes itératifs, qui visitent leur ensemble de données plusieurs fois dans une boucle, et l'analyse de données interactive ou exploratoire, comme les requêtes répétées de type base de données. La latence de telles applications peut être réduite de plusieurs ordres de grandeur par rapport aux implémentations Apache Hadoop MapReduce. Parmi les algorithmes itératifs figurent les algorithmes d'entraînement pour les systèmes de apprentissage automatique, qui ont constitué l'impulsion initiale pour le développement de Spark.
Spark Core
Spark Core est la fondation du projet global. Il fournit la répartition des tâches distribuées, l'ordonnancement et les fonctionnalités de base d'entrée/sortie, exposées via une interface de programmation pour Java, Python, Scala, .NET et R, centrée sur l'abstraction RDD. L'API Java est disponible pour d'autres langages JVM et certains langages non-JVM qui peuvent se connecter à la JVM, comme Julia. Cette interface reflète un modèle de programmation fonctionnel ou d'ordre supérieur : un programme pilote invoque des opérations parallèles telles que map, filter ou reduce sur un RDD en passant une fonction à Spark, qui planifie l'exécution de la fonction en parallèle sur le cluster. Ces opérations, ainsi que d'autres comme les jointures, prennent des RDD en entrée et produisent de nouveaux RDD. Les RDD sont immuables et leurs opérations sont paresseuses ; la tolérance aux pannes est obtenue en suivant la lignée de chaque RDD (la séquence d'opérations qui l'a produit) afin qu'il puisse être reconstruit en cas de perte de données. Les RDD peuvent contenir tout type d'objets Python, .NET, Java ou Scala.
Outre le style fonctionnel orienté RDD, Spark fournit deux formes restreintes de variables partagées : les variables de diffusion référencent des données en lecture seule nécessaires sur tous les nœuds, tandis que les accumulateurs peuvent être utilisés pour programmer des réductions de manière impérative.
Un exemple typique de programmation fonctionnelle centrée sur les RDD est un programme Scala qui calcule les fréquences de mots à partir de fichiers texte et affiche les plus courants. Chaque map, flatMap et reduceByKey prend une fonction anonyme qui effectue une opération simple sur un seul élément de données (ou une paire d'éléments) et l'applique pour transformer un RDD en un nouveau RDD.
PySpark
PySpark est l'API Python pour Apache Spark, introduite dans Spark 0.7, publiée en février 2013. Elle permet d'écrire des applications Spark en Python et fournit un shell interactif pour l'analyse exploratoire. Le code PySpark s'exécute sous le runtime CPython standard et peut appeler des bibliothèques Python natives telles que NumPy et SciPy ; la communication entre le code utilisateur Python et le cœur basé sur JVM de Spark a historiquement été médiée par la bibliothèque Py4J.
PySpark fournit des interfaces Python pour la plupart des composants de Spark, y compris Spark Core, Spark SQL et l'API DataFrame, Structured Streaming et MLlib ; depuis Spark 4.1, il expose également l'API Spark Declarative Pipelines. Une API compatible pandas, connue sous le nom d'API pandas sur Spark, a été intégrée dans PySpark dans Apache Spark 3.2.0, publié en octobre 2021. Elle fournit des équivalents à l'API d'analyse de données pandas qui s'exécutent contre le moteur Spark, permettant d'exécuter du code de style pandas sur des données distribuées. Le composant est issu de Koalas, un projet séparé open-sourcé par Databricks en 2019, qui a ensuite été fusionné dans PySpark. PySpark fournit également un client pour Spark Connect, une architecture client-serveur permettant la connectivité à distance aux clusters Spark depuis les applications PySpark.
Un programme PySpark typique utilise une SparkSession pour charger des données en tant que DataFrame et appliquer des transformations.
Spark SQL
Spark SQL est un composant au-dessus de Spark Core qui a introduit une abstraction de données appelée DataFrames, offrant un support pour les données structurées et semi-structurées. Spark SQL fournit un langage spécifique au domaine (DSL) pour manipuler les DataFrames en Scala, Java, Python ou .NET. Il fournit également un support du langage SQL, avec des interfaces en ligne de commande et un serveur ODBC/JDBC. Bien que les DataFrames manquent de vérification de type à la compilation offerte par les RDD, à partir de Spark 2.0, le Dataset fortement typé est entièrement pris en charge par Spark SQL également.
Spark Declarative Pipelines
Spark Declarative Pipelines (SDP) est un framework déclaratif pour définir et exécuter des pipelines de données extract, transform, load (ETL), ajouté dans Apache Spark 4.1.0, publié le 16 décembre 2025. Les développeurs déclarent les ensembles de données qu'un pipeline traite et les transformations à appliquer, permettant au moteur d'optimiser l'exécution. Ce framework vise à simplifier le développement et la maintenance des pipelines en réduisant le code de base et en permettant de meilleures opportunités d'optimisation.
Gestion de cluster et stockage
Spark nécessite un gestionnaire de cluster et un système de stockage distribué. Pour la gestion de cluster, Spark prend en charge le Spark natif autonome, Hadoop YARN, Apache Mesos ou Kubernetes. Un cluster Spark natif autonome peut être lancé manuellement ou via les scripts de lancement fournis par le package d'installation. Il est également possible d'exécuter les démons sur une seule machine pour les tests. Pour le stockage distribué, Spark peut s'interfacer avec une grande variété de systèmes distribués, y compris Alluxio, le système de fichiers distribué Hadoop (HDFS), le système de fichiers MapR (MapR-FS), Cassandra, OpenStack Swift, Amazon S3, Kudu, le système de fichiers Lustre ou une solution personnalisée. Spark prend également en charge un mode local pseudo-distribué, généralement utilisé uniquement pour le développement ou les tests, où le stockage distribué n'est pas requis et où le système de fichiers local peut être utilisé ; dans un tel scénario, Spark s'exécute sur une seule machine avec un exécuteur par cœur de CPU.
La capacité de Spark à gérer à la fois des charges de travail par lots et en streaming, combinée à son traitement en mémoire et à ses API riches, en a fait un choix populaire pour le traitement de données à grande échelle dans des secteurs allant de la finance à l'informatique en nuage. Son intégration avec Apache Kafka pour les données en streaming et Apache Airflow pour l'orchestration des flux de travail étend encore son utilité dans les pipelines de données modernes.