Aller au contenu

Entre Pandas et Spark, une histoire de trames

Qu’est-ce qu’une trame de données Python Pandas? Pour certains jeux de données, est-ce mieux d’utiliser Apache Spark? 

photo d'une femme tapant sur un ordinateur portable vue d'en haut
18 juillet 2023

Anchal Gupta

Le langage Python a beaucoup gagné en popularité pour l’analyse des données en raison de sa communauté active et de ses nombreuses bibliothèques et ressources. Il pourrait même devenir un langage commun en science des données et dans le domaine des produits d’analyse Web. Je m’appelle Anchal Gupta, et je suis ingénieure en apprentissage automatique. Dans ce billet, je me pencherai sur la transition entre les trames de données Pandas et Spark (ces articles sont disponibles en anglais seulement).

En science des données, l’apprentissage automatique est l’un des principaux éléments utilisés pour maximiser la valeur des données. Il est donc essentiel d’étudier la distribution et les statistiques des données pour en tirer des constats utiles. 

Depuis l’arrivée d’une foule de packages et de bibliothèques comme NumPy, Pandas, Scikit-learn, Keras, TensorFlow, et j’en passe, les mathématiques et les calculs sont devenus de plus en plus faciles, faisant de Python l’outil de choix pour l’apprentissage automatique et l’analyse des données.  

D’un point de vue plus général, les données peuvent être en format structuré ou non structuré. 

Les données structurées forment un schéma et un modèle bien défini, tandis que les données semi-structurées et non structurées prennent la forme de fichiers JSON, audio ou vidéo et de publications sur les médias sociaux.  

Dans les applications, comme les modèles de tarification cognitifs, la plupart des données sont bien structurées. Un des packages les plus couramment utilisés pour analyser et manipuler ce type de données s’appelle Pandas.  

Qu’est-ce que Python Pandas?  

Son nom complet est « Python Data Analysis Library ». Le saviez-vous?   

C’est un package Python à source ouverte très efficace et facile d’utilisation pour l’analyse des données.  

Quand faut-il utiliser Python Pandas?  

Pandas est un outil idéal pour la manipulation de données. Il est conçu pour faciliter les tâches s’y rattachant, comme : 

  • la lecture; 
  • la visualisation; 
  • la compilation. 

Pandas est compatible avec la plupart des formats de fichiers. Par exemple : 

  • CSV; 
  • JSON;  
  • texte brut.  

 

Ses fonctions complémentaires facilitent la connexion à une base de données SQL.  

Après la lecture des données, Pandas crée un objet Python en rangées et colonnes, appelé « trame de données ». Cette trame est très semblable à un tableau Excel.  

Que peut-on faire avec une trame de données Pandas? 

  • Manipuler les données (indexer, renommer, trier, fusionner, etc.);  
  • Redéfinir les données en modifiant, ajoutant ou supprimant des colonnes;  
  • Nettoyer et préparer des données en entrant des éléments manquants ou des NaN.  

Malgré tous ces avantages, l’outil a aussi ses inconvénients.  

Pourquoi Pandas ne nous convient-il pas?  

Quand les données grandissent à un rythme exponentiel et que les rangées et colonnes atteignent les milliards, les manipulations complexes, comme la fusion ou le groupement de données, nécessitent des fonctions de parallélisation et d’informatique distribuée. Ces fonctions, très lentes et assez chères, sont difficiles à gérer dans une trame de données Pandas, qui n’autorise pas la parallélisation.  

Ainsi, pour construire des applications extensibles, il nous faut des packages ou un logiciel plus rapide qui autorise la parallélisation de grands jeux de données.  

Mon équipe a eu des problèmes semblables avec un de nos clients. Elle devait fusionner deux trames comportant des millions de rangées, pour un total d’environ 39 milliards de rangées.   

En étudiant nos options, nous en sommes venus à la conclusion qu’Apache Spark était la meilleure solution.  

Qu’est-ce qu’Apache Spark?  

Apache Spark est un cadre d’applications en grappe à source ouverte qui peut fonctionner 100 fois plus vite sur quelques applications dotées de fonctions primitives en mémoire.  

Il convient aux algorithmes d’apprentissage automatique, puisqu’il permet aux logiciels de télécharger et de parcourir sans cesse les données.  

  • Il fonctionne à même la mémoire vive (RAM), ce qui accélère le traitement, comparativement aux structures sur disque dur. Enfin, il peut servir à créer des pipelines de données, à exécuter des algorithmes d’apprentissage automatique et plus encore.    
  • Les manipulations dans la trame de données Spark se font en parallèle, sur différents nœuds d’une grappe, ce qui n’est pas possible dans Pandas.  
  • Apache Spark possède une interface API pour la gestion de grands jeux de données en différents langages : Python, R, Scala et Java.  

Il est également compatible avec différents types de structures :  

  • RDD (Resilient distributed datasets ou jeux de données distribués et résilients); 
  • Trames de données; 
  • Jeux de données. 

Les trames Spark sont mieux adaptées aux données structurées, où les schémas sont bien définis, tandis que les RDD servent mieux aux données semi-structurées ou non structurées.   

Temps de calcul entre Pandas et Apache Spark  

En exécutant plusieurs requêtes de fusion dans une trame de données à 100 millions de rangées, Pandas a manqué de mémoire. Apache Spark, en revanche, a exécuté la même opération en 10 secondes. Puisque la trame Pandas n’est pas distribuée, le traitement se fait plus lentement quand le volume de données est grand.   

Comment choisir entre Pandas et Spark 

Les trames Pandas sont stockées en mémoire, sur un seul serveur. Leur taille et leur traitement sont donc limités par la mémoire et la puissance de ce serveur.  

Les avantages d’utiliser Pandas plutôt qu’Apache Spark sont évidents :  

  • Pas besoin de grappe; 
  • Plus simple; 
  • Plus flexible; 
  • Plus de bibliothèques; 
  • Plus facile à intégrer; 
  • Meilleur rendement quand l’extensibilité n’est pas un problème. 

Les trames Spark sont excellentes si vous voulez construire une application extensible, car elles sont distribuées sur votre grappe Spark. Vous devez ajouter des données? Il vous suffit d’ajouter des nœuds à votre grappe.  

Vous n’êtes pas familier avec Apache Spark? 

Prochaine étape : découvrezKoalas, par Databricks 

Après avoir lu ce billet, vous craignez probablement de devoir apprendre une autre technologie et mémoriser encore plus de syntaxe pour utiliser Spark. Mais ce problème est vite réglé, grâce à Koalas.  

« Koalas : une transition facile de Pandas à Apache Spark » 

Pandas est un outil fantastique pour analyser de petits jeux de données sur une machine unique. Lorsqu’ils ont besoin de plus gros jeux de données, les utilisateurs se tournent souvent vers PySpark. Mais la conversion du code de Pandas à PySpark n’est pas chose simple, car les API de PySpark diffèrent largement de ceux de Pandas. Koalas adoucit considérablement la courbe d’apprentissage en insérant par-dessus PySpark des API semblables à ceux de Pandas. Avec Koalas, les utilisateurs profitent des avantages de PySpark sans grand effort : ils peuvent donc créer de la valeur beaucoup plus rapidement[1]. 

[1] https://databricks.com/blog/2019/04/24/koalas-easy-transition-from-pandas-to-apache-spark.html 

Vous avez un projet ?