API Spark : moteur d’analyse et de traitement de données

API Spark

Apache Spark est un moteur d'analyse unifié pour le traitement des données à grande échelle. Ses API haut niveau en Java, Scala, Python et R simplifient les traitements en parallèle sur des clusters. Spark est très versatile avec ses outils pour SQL, les charges structurées et le traitement en flux. Cet article présente Spark, son installation, son utilisation et les nouveautés de la version 3.0.

📊 Spark 3.0 : 2 fois plus rapide

Sur le benchmark TPC-DS, Spark 3.0 s'est montré environ deux fois plus rapide que la version précédente grâce à des optimisations comme l'exécution adaptative des requêtes et une meilleure conformité SQL.

Présentation de Spark et de ses API

Apache Spark est un moteur d'analyse unifié pour le traitement des données à grande échelle. Grâce à ses API haut niveau en Java, Scala, Python et R, il simplifie considérablement les traitements en parallèle sur des clusters de machines. Son optimisation de l'exécution graphique générale et sa panoplie d'outils pour le SQL, le traitement de données MapReduce en streaming démontrent toute sa polyvalence dans le domaine du Big Data.

Une multitude d'API haut niveau

Spark est armé de plusieurs API de haut niveau qui permettent de manipuler aisément de grands volumes de données, notamment pour le machine learning :

  • L'API Java permet d'intégrer Spark dans des applications Java existantes et de tirer parti de l'écosystème Java.
  • Scala, le langage natif de Spark, offre une syntaxe concise et expressive pour interagir avec Spark.
  • PySpark permet d'utiliser Spark depuis Python, ouvrant ainsi l'univers du machine learning avec les librairies Python.
  • SparkR rend accessible les capacités de Spark aux data scientists et statisticiens utilisateurs de R.

Un moteur d'exécution graphique optimisé

Sous le capot, Spark s'appuie sur un moteur d'exécution graphique hautement optimisé. Celui-ci planifie et exécute efficacement les tâches en parallèle sur le cluster, tout en gérant automatiquement les dépendances entre ces tâches. Cette architecture permet à Spark d'atteindre des performances 100 fois supérieures à Hadoop MapReduce pour certaines applications.

Des outils intégrés pour le SQL et le streaming

Au-delà du traitement batch, Spark intègre des outils puissants pour :

  • L'analyse interactive avec Spark SQL qui permet d'interroger des données via des requêtes SQL standards
  • Le traitement de données en streaming avec Structured Streaming basé sur une API de type DataFrame
  • Le machine learning à grande échelle avec MLlib qui fournit des algorithmes distribués prêts à l'emploi
  • Le traitement de graphes avec GraphX pour l'analyse de données sous forme de graphes

Cette riche panoplie d'outils, combinée à la rapidité d'exécution de Spark, en fait une plateforme de choix pour développer des applications Big Data complètes, allant de l'ingestion des données à la restitution des résultats, en passant par leur analyse. Que ce soit pour du traitement batch, du streaming ou du machine learning, Spark s'impose comme un standard de l'industrie pour exploiter le potentiel des big data.

Utilisation pratique de Spark : installations et exemples

Spark est devenu le framework incontournable pour le traitement des données à grande échelle, la data science et le machine learning. Son API Python, PySpark, permet aux développeurs et data scientists de tirer pleinement parti de sa puissance et de sa flexibilité dans cet écosystème populaire.

Installation et prérequis

Pour utiliser PySpark, il faut d'abord s'assurer d'avoir Java, Python et Spark installés sur sa machine. PySpark s'appuie sur la bibliothèque Java PY4J pour communiquer dynamiquement avec la JVM. La distribution Anaconda, très utilisée en data science, fournit également un environnement tout-en-un pratique avec le notebook Jupyter.

Une fois l'environnement en place, on peut démarrer PySpark en mode interactif avec la commande :

./bin/pyspark --master "local[2]"

Cela lance un interpréteur Python avec un contexte Spark local utilisant 2 threads. D'autres options permettent de se connecter à un cluster Spark existant.

Exécuter des applications PySpark

En plus du mode interactif, on peut packager son code PySpark dans des scripts à exécuter avec spark-submit. Par exemple :

./bin/spark-submit examples/src/main/python/pi.py 10

Cela exécute le script Python pi.py qui calcule une approximation de Pi en parallèle sur le cluster, avec 10 partitions.

Les API DataFrame, Dataset et RDD

PySpark propose plusieurs API de haut-niveau pour manipuler les données distribuées :

  • DataFrame : des collections distribuées de lignes avec des colonnes nommées, comme des tables relationnelles
  • Dataset : des collections d'objets fortement typés correspondant à un schéma, propres à Java/Scala
  • RDD (Resilient Distributed Dataset) : des collections d'enregistements distribués bruts, l'API historique de plus bas niveau

Les DataFrame et Dataset proposent une interface plus riche et optimisée que les RDD. Ils infèrent le schéma des données et permettent des requêtes structurées type SQL.

L'API DataFrame s'utilise naturellement depuis Python pour analyser des données tabulaires à grande échelle, tandis que les RDD restent utiles pour des traitements plus custom nécessitant un contrôle fin.

Koalas, des DataFrame façon pandas

Pour faciliter la transition vers PySpark, le projet Koalas fournit une implémentation de l'API populaire pandas de Python, directement au dessus des DataFrame Spark. Avec Koalas, les data scientists retrouvent l'expressivité de pandas sur des volumes de données distribués, facilitant leur productivité.

L'adoption massive de PySpark et l'émergence d'outils comme Koalas démontrent que Python est devenu un acteur majeur de l'écosystème Spark, aux côtés de Scala et Java. PySpark rend le pouvoir de Spark accessible au plus grand nombre pour construire des pipelines de données et de machine learning à très grande échelle.

API Spark

Nouvelles fonctionnalités et innovations dans Spark 3.0

La nouvelle version majeure d'Apache Spark apporte de nombreuses améliorations dans les domaines clés que sont le traitement SQL et l'intégration du langage Python. Ces deux langages sont parmi les plus utilisés avec Spark aujourd'hui et Spark 3.0 optimise grandement leur prise en charge.

Des performances doublées grâce à de multiples optimisations

Le benchmark TPC-DS, référence dans l'industrie pour mesurer les performances des solutions big data et business intelligence, montre que Spark 3.0 est environ deux fois plus rapide que la version 2.4. Cela a été rendu possible grâce à des fonctionnalités comme :

  • L'exécution adaptative des requêtes qui génère un meilleur plan d'exécution au moment de l'exécution
  • L'élagage de partitions dynamique qui évite de lire les données non pertinentes
  • Une conformité accrue aux standards ANSI SQL pour faciliter la migration depuis d'autres moteurs SQL

Python et les data scientists à l'honneur

Jusqu'à présent, Spark était surtout utilisé par les data engineers pour des tâches de type ETL. La version 3.0 s'ouvre davantage aux data scientists en améliorant significativement les API Python :

  • Accélération du développement de Koalas, une implémentation pandas pour Spark, qui couvre maintenant près de 80% des fonctionnalités pandas
  • Améliorations de PySpark avec des suggestions de types, des UDF pandas supplémentaires et une meilleure gestion des erreurs
  • Jusqu'à 40 fois plus de rapidité pour les appels aux UDF en langage R

Autres nouveautés notables

Accélération GPU transparente

Spark 3.0 reconnaît désormais les GPU comme une ressource de première classe au même titre que le CPU et la mémoire. Les charges de travail accélérées par GPU peuvent ainsi être allouées directement aux serveurs disposant des ressources GPU nécessaires.

Évolutions des versions supportées

À noter également que le support de Python 2 et des versions de R antérieures à 3.4 a pris fin. Java 11, Scala 2.12 et Hadoop 3 sont maintenant supportés tandis que le support de Hadoop 2.6 et Scala 2.11 a été supprimé.

Au total, ce sont plus de 3400 tickets Jira qui ont été résolus dans le développement de cette nouvelle version majeure d'Apache Spark, renforçant son statut de framework incontournable pour le traitement des big data, la data science, le machine learning et l'analyse de données en général.

Un outil big data performant et en constante évolution

En définitive, Apache Spark s'impose comme un outil de traitement temps réel incontournable dans l'écosystème big data grâce à ses performances, sa flexibilité et la richesse de ses API. Avec une communauté active et des mises à jour régulières comme la version 3.0, Spark ne cesse de s'améliorer pour répondre aux besoins toujours plus complexes d'analyse de données. Nul doute que son adoption continuera de croître tant dans le monde académique qu'en entreprise, ouvrant la voie à de nouvelles applications innovantes.