Qu'est-ce que l'API Spark DataFrame ?

Apache Spark est un moteur de traitement distribué conçu pour traiter des données structurées, semi-structurées et non structurées à grande échelle. Pour interagir avec le moteur et définir des opérations de données distribuées, les développeurs utilisent l'API Spark.


L'API Spark DataFrame est au cœur du développement Spark moderne. Un DataFrame organise et traite les données distribuées dans des colonnes nommées, un peu comme une table dans une base de données relationnelle ou une feuille de calcul. Il fournit une interface structurée et déclarative pour analyser des ensembles de données volumineux, tout en optimisant automatiquement l'exécution physique en arrière-plan.

Architecture et exécution de l'API Spark

Pour comprendre comment l'API Spark exécute le code sur un réseau distribué, il est important de connaître les composants de base de son architecture d'exécution :


  • Pilote : coordinateur central de l'application Spark. Il lit votre code, traduit les opérations déclaratives en plans d'exécution logiques et planifie les tâches sur les nœuds de calcul.
  • Gestionnaire de cluster : outil d'allocation des ressources (tel que Kubernetes ou des gestionnaires de ressources autonomes) qui provisionne les ressources de processeur, de mémoire et de mise en réseau sur l'ensemble du cluster.
  • Exécuteurs : instances de nœud de calcul s'exécutant sur les nœuds du cluster. Ils reçoivent les instructions de tâche du pilote, exécutent les opérations de traitement des données localement en mémoire, et renvoient les résultats ou les écrivent dans l'espace de stockage.
  • DAG, étapes et tâches : Spark n'exécute pas les transformations de données ligne par ligne. À la place, le pilote compile le code DataFrame dans un graphe orienté acyclique (DAG) d'opérateurs physiques. Le pilote regroupe ces opérateurs en grandes phases d'exécution appelées étapes, qui sont divisées par des limites de brassage de données. Il décompose ensuite ces étapes en tâches individuelles distribuées aux exécuteurs pour une exécution en parallèle.

Quelle est la différence entre les RDD et les DataFrames Spark ?

Lorsqu'ils conçoivent des pipelines de données distribués, les développeurs ont le choix entre deux interfaces de programmation principales :


  • RDD (ensemble de données distribué résilient) Spark : l'API Spark d'origine de bas niveau. Elle représente une collection immuable et tolérante aux pannes d'objets JVM distribués sur un cluster. Comme les RDD contiennent des objets Java arbitraires, le moteur d'exécution ne peut pas inspecter leur structure interne. Les développeurs doivent donc écrire et ajuster manuellement une logique de transformation de bas niveau, ce qui entraîne souvent une surcharge importante de la récupération de mémoire et une sérialisation lente.
  • DataFrame Spark : la norme moderne pour le traitement des données structurées. Les DataFrames organisent les données en lignes et en colonnes définies par un schéma strict. Comme le moteur d'exécution comprend les types de données et la structure de l'ensemble de données, il peut optimiser automatiquement le code avant de l'exécuter.

Pourquoi choisir les DataFrames plutôt que les RDD ?

L'API DataFrame est le choix privilégié pour presque tous les cas d'utilisation d'ingénierie de données et de data science. Les ensembles de données distribués résilients (RDD) sont réservés aux scénarios dans lesquels vous devez manipuler des données brutes non structurées (telles que des fichiers binaires ou des flux multimédias) à l'aide d'objets Java personnalisés. Les DataFrames nécessitent moins de code, s'exécutent automatiquement plus rapidement et utilisent la gestion de la mémoire binaire hors tas pour contourner les goulots d'étranglement de la récupération de mémoire de la JVM.

Comment les équipes de données utilisent l'API Spark

L'API Spark DataFrame simplifie les tâches de traitement, de nettoyage et de préparation de grands volumes de données, qui sont gourmandes en ressources de calcul.


  • Ingénieurs de données : les ingénieurs utilisent l'API DataFrame pour créer des pipelines de données résilients et tolérants aux pannes. Ils extraient les données brutes, appliquent des schémas, exécutent des transformations structurées et écrivent des tables conformes dans des lacs de données ou des entrepôts de données cloud. La syntaxe déclarative leur permet de traiter des téraoctets de données par jour tout en minimisant la complexité du code et les frais de maintenance.
  • Data scientists : les data scientists utilisent l'API DataFrame pour explorer et préparer des ensembles de données volumineux qui dépassent les limites de mémoire d'une seule machine. En répartissant les partitions de données entre les nœuds de calcul, ils peuvent effectuer des analyses de données exploratoires, nettoyer les valeurs nulles et créer des caractéristiques à grande échelle, ce qui accélère l'obtention d'insights.

Bibliothèques de base basées sur l'API DataFrame

L'API Spark DataFrame sert de base de programmation pour les bibliothèques de traitement avancées de Spark :


  • Spark SQL : ce module vous permet d'exécuter des requêtes SQL conformes aux normes de l'ANSI directement sur des ensembles de données Spark. Vous pouvez interroger des DataFrames en tant que vues temporaires, en combinant de manière fluide du code Python ou Scala déclaratif avec des requêtes SQL standards.
  • Structured Streaming : ce moteur traite des flux continus de données en temps réel. Il utilise les mêmes commandes de l'API DataFrame que le traitement par lot statique, et gère automatiquement le microtraitement par lot, la tolérance aux pannes et la gestion des états.
  • MLlib : cette bibliothèque de machine learning distribuée de Spark utilise des DataFrames pour gérer et préparer les ensembles de données d'entraînement, en fournissant des algorithmes intégrés et évolutifs pour la classification, la régression, le clustering et le filtrage collaboratif.

Avantages de l'API Spark DataFrame

Optimisation déclarative

Les DataFrames utilisent un optimiseur de requêtes intégré appelé Catalyst Optimizer. Lorsque vous écrivez du code DataFrame, l'optimiseur réécrit automatiquement le plan d'exécution physique en appliquant le pushdown des filtres, l'élagage des projections et la réorganisation des jointures pour s'exécuter le plus rapidement possible sans réglage manuel.

Flexibilité linguistique

Que votre équipe écrive du code en Python (PySpark), Scala, Java ou R, l'API DataFrame garantit des performances identiques. Le plan d'exécution sous-jacent est compilé et optimisé dans la même couche d'exécution indépendante de la JVM.

Gestion efficace de la mémoire

Les DataFrames utilisent le moteur d'exécution Tungsten pour stocker les données dans un format binaire hors tas hautement compressé. Cela élimine la surcharge liée à la création d'objets JVM et empêche les pauses de récupération de mémoire de figer les threads d'exécuteur.

Utiliser l'API Spark DataFrame sur Google Cloud

L'exécution de Spark Open Source nécessite traditionnellement une configuration manuelle des clusters, une gestion des versions logicielles et un appairage de réseaux complexe. Google Cloud simplifie ce processus en proposant Managed Service pour Apache Spark, qui transforme l'exécution distribuée en une plate-forme de données entièrement gérée et adaptée aux entreprises.


Les équipes de données exécutent des charges de travail Spark DataFrame sur Google Cloud à l'aide des fonctionnalités suivantes :


  • Déploiement de clusters sans serveur et gérés : Google Cloud vous permet de choisir le modèle d'exécution qui correspond à vos besoins opérationnels. Vous pouvez exécuter du code DataFrame en mode sans serveur pour envoyer directement des jobs par lot (vous ne payez que pour les secondes d'exécution exactes, car les ressources évoluent automatiquement) ou déployer des clusters gérés persistants et hautement personnalisables pour les charges de travail continues.
  • Connectivité BigQuery optimisée : le connecteur Spark-BigQuery contourne les transitions orientées lignes de la JVM en consommant les données BigQuery directement au format natif Apache Arrow. Les data scientists peuvent également utiliser une interface de notebook intégrée pour exécuter du code PySpark DataFrame et des requêtes SQL sur le même ensemble de données gouverné, sans changer d'environnement.
  • Exécution C++ native vectorisée : lorsque vous exécutez des charges de travail Spark sur Google Cloud, vous pouvez activer Lightning Engine pour vos lots sans serveur ou vos clusters gérés. Ce moteur d'exécution de requêtes C++ natif compile les plans de requête physiques directement en instructions natives à l'aide de Velox et Gluten. En contournant le modèle d'itération Volcano de la JVM et les goulots d'étranglement liés à la récupération de mémoire, il accélère vos charges de travail DataFrame et Spark SQL jusqu'à 4,9 fois, sans aucune modification de code.


Passez à l'étape suivante

Profitez de 300 $ de crédits gratuits et de plus de 20 produits Always Free pour commencer à créer des applications sur Google Cloud.

  • Produits Google Cloud
  • Parcourez plus de 100 produits. Les nouveaux clients bénéficient de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail. Tous les clients peuvent utiliser plus de 25 produits gratuitement, dans les limites mensuelles spécifiées.
Google Cloud