Identifiez les atouts de Spark

Découvrez Apache Spark : Le moteur du calcul distribué 🚀

Dans le chapitre précédent, on a exploré le calcul distribué, cette super technique qui permet de résoudre des problèmes complexes en faisant travailler plusieurs ordinateurs ensemble. Maintenant, place à Apache Spark, le framework qui incarne parfaitement ces principes et qui va devenir votre meilleur allié pour traiter des montagnes de données. 🏔️

Comme vous avez pu le constater, nous vivons dans un monde où les données explosent de partout : réseaux sociaux, capteurs IoT, transactions bancaires, images médicales… Bref, le fameux Big Data. Les outils traditionnels, comme Hadoop MapReduce, ont bien essayé de suivre le rythme, mais ils ont vite montré leurs limites. Trop lents, trop complexes, pas assez flexibles. C’est exactement dans ce contexte-là qu’Apache Spark entre en scène. 🎬

Spark a été créé pour résoudre un problème simple mais crucial : traiter des données massives plus rapidement et plus efficacement. Les frameworks existants, comme Hadoop MapReduce, étaient conçus pour écrire et lire des données sur des disques durs, ce qui ralentissait tout le processus. C’est un peu comme si vous deviez aller chercher chaque ingrédient de votre recette au supermarché à chaque étape de la préparation. 🛒🍳

Pourquoi hadoop a fait le choix d'écrire tout sur disque dur alors si c'est stupide de faire ça ?

Ah, excellente question ! 🧐 En fait, le choix d’Hadoop d’écrire tout sur disque dur n’était pas "stupide" à l’époque (au début des années 2000), mais plutôt une solution pragmatique aux contraintes technologiques et aux besoins de l’époque (la RAM était beaucoup plus chère que maintenant, la vitesse demandée n’était pas du tout la même, le Big Data n’avait pas la même consistance etc…). Voici pourquoi Hadoop a opté pour cette approche, et pourquoi Spark a pu faire mieux plus tard. 🚀

Les créateurs de Spark se sont dit : "Et si on gardait tout en mémoire ?" Et c’est exactement ce qu’ils ont fait. En stockant les données intermédiaires en mémoire vive (RAM), Spark a révolutionné le traitement des données, rendant les calculs jusqu’à 100 fois plus rapides. 🚀

Alors, pourquoi choisir Spark plutôt qu’un autre framework ?

Voici ce qui le rend unique :

  • Vitesse impressionnante : On vient d’en parler, je ne reviens pas dessus. C’est comme passer d’une vieille 2CV à une Ferrari. 🏎️

  • Polyvalence : Spark n’est pas limité à une seule tâche. Il peut faire du traitement par lots, de l’analyse en temps réel, du machine learning, et même de l’analyse de graphe. C’est un couteau suisse du Big Data. 🔪

  • Simplicité d’utilisation : Avec PySpark, Spark est accessible aux développeurs Python, ce qui le rend plus convivial que des frameworks basés sur Java ou Scala. Pas besoin de tout réapprendre ! 🐍 De plus, les API de Spark sont conçues pour être faciles à utiliser, même pour les débutants.

  • Scalabilité horizontale : Ceci est bien entendu un prérequis pour pouvoir faire partie de la catégorie des frameworks de calcul distribué. Cependant, c’est bien de noter que Spark le fait tout aussi bien que les autres si ce n’est mieux de par sa simplicité d’utilisation. Qui d’entre nous achèterait un smartphone qui peut tout faire sauf… appeler ! 📱

L’écosystème de Spark : Un couteau suisse du Big Data 🛠️

Comme dit précédemment, au-delà de sa vitesse impressionnante, Spark se distingue par son écosystème riche et intégré, conçu pour répondre à une multitude de défis du traitement de données. Regardons donc d’un peu plus près ce qu’il y a dans la boîte à outils de Spark.

Spark a repéré cinq domaines clés dans lesquels il peut vous simplifier la vie. Et comme vous vous en doutez, dans chacun de ces domaines, Spark gère la partie calcul distribué pour vous, sans que vous ayez à vous en soucier. Vous pouvez vous concentrer sur votre problème, et Spark s’occupe du reste. Voici comment il vous facilite la vie.

Utiliser Spark avec Python : PySpark

Spark a été conçu tout en prenant en compte la simplicité de prise en main, pour vous, les développeurs. Sympa, non ? 😊

Python est déjà ultra-populaire dans les domaines de la science des données et de l’ingénierie des données, et PySpark agit comme un pont entre la simplicité de Python et la puissance de Spark. Vous pouvez écrire des applications Spark avec la même facilité que si vous codiez en Python pur. Plus besoin de se battre avec des concepts complexes ou des langages obscurs : PySpark rend le calcul distribué accessible à la majorité d’entre nous. 🚀

Quand vous commencez à utiliser PySpark, la première chose que vous allez créer est une SparkSession. C’est l’objet central qui vous permet d’interagir avec Spark. En gros, c’est comme le chef d’orchestre de votre application Spark. 🎻

from pyspark.sql import SparkSession

# Créer une SparkSession
spark = SparkSession.builder \
    .appName("MonAppSpark") \  # Nom de votre application
    .getOrCreate()

Ce que fait ce code :

  • Il crée une SparkSession, qui est le point d’entrée pour utiliser Spark.

  • Le nom de l’application (appName) est utile pour identifier votre job dans l’interface de monitoring de Spark.

  • getOrCreate() permet de réutiliser une session existante si elle est déjà créée, ou d’en créer une nouvelle sinon.

C’est grâce à cet objet que vous allez pouvoir exploiter toute la puissance de Spark, tout en restant dans l’environnement convivial de Python. 🐍

Interroger des données avec Spark SQL

Ensuite, Spark s’est attardé sur les différents domaines d’utilisation de son framework. Le premier sur lequel on s’attarde en général est l’extraction de données via requêtes SQL. Même si vous avez besoin d’interroger des téraoctets de données, pas de problème, Spark SQL le gèrera pour vous. Ainsi, vous pouvez poser des questions à vos données comme si vous utilisiez une base de données classique. Par exemple :

  • "Combien d’utilisateurs ont acheté ce produit ?"

  • "Quel est le revenu moyen par région ?"

Et regardez comment c’est simple :

from pyspark.sql import SparkSession

# Créer une session Spark
spark = SparkSession.builder.appName("SparkSQLExample").getOrCreate()

# Charger un fichier CSV en DataFrame
df = spark.read.csv("data.csv", header=True, inferSchema=True)

# Exécuter une requête SQL
df.createOrReplaceTempView("data")
result = spark.sql("SELECT region, AVG(revenue) FROM data GROUP BY region")

# Afficher le résultat
result.show()

Faire de l’apprentissage automatique avec MLlib

Quel autre domaine est également gourmand en ressources informatiques ? Et oui, le Machine Learning (ML). Tout simplement car on souhaite souvent entraîner un modèle de ML sur des données massives. MLlib est la partie de Spark spécialisée pour ça. Que ce soit pour reconnaître des images, classer des textes, ou prédire des tendances, MLlib gère la distribution des calculs sur votre cluster. Vous n’avez qu’à définir votre modèle, et Spark s’occupe de le faire tourner sur des milliers de machines si nécessaire. 

La syntaxe est volontairement très proche de celle de scikit-learn afin d’être le plus facile possible à prendre en main pour ceux qui font déjà du ML d’autre part. Regardez:

from pyspark.ml.classification import LogisticRegression
from pyspark.ml.feature import VectorAssembler
from pyspark.sql import SparkSession

# Créer une session Spark
spark = SparkSession.builder.appName("MLlibExample").getOrCreate()

# Charger des données
data = spark.read.csv("data.csv", header=True, inferSchema=True)

# Préparer les données
assembler = VectorAssembler(inputCols=["feature1", "feature2"], outputCol="features")
data = assembler.transform(data)

# Entraîner un modèle de régression logistique
lr = LogisticRegression(labelCol="label", featuresCol="features")
model = lr.fit(data)

# Faire des prédictions
predictions = model.transform(data)
predictions.show()

Analyser des graphes avec GraphX

Un domaine que vous connaissez peut-être moins mais qui est également très demandé dans le domaine du Big Data est la recherche au sein d’immenses graphes de données. Et si vos données ressemblent à un réseau complexe (comme des relations entre utilisateurs ou des connexions dans un réseau social), GraphX est l’outil de l’écosystème Spark que vous allez adorer. Il vous permet d’analyser des graphes à grande échelle, en exploitant la puissance de Spark pour traiter des millions de nœuds et de connexions. Là encore, Spark gère la distribution des calculs, vous n’avez qu’à vous concentrer sur l’analyse.

from pyspark.sql import SparkSession
from graphframes import GraphFrame

# Créer une session Spark
spark = SparkSession.builder.appName("GraphXExample").getOrCreate()

# Créer des DataFrames pour les nœuds et les arêtes
vertices = spark.createDataFrame([("1", "Alice"), ("2", "Bob")], ["id", "name"])
edges = spark.createDataFrame([("1", "2", "friend")], ["src", "dst", "relationship"])

# Créer un graphe
graph = GraphFrame(vertices, edges)

# Trouver les connexions (par exemple, les amis d'Alice)
results = graph.find("(a)-[e]->(b)").filter("a.name = 'Alice'")
results.show()

Traiter des données en temps réel avec Spark Streaming

Enfin, si vous avez besoin de traiter des données en temps réel (comme des flux de logs ou des transactions financières), Spark Streaming est également disponible. Cet élément de l’écosystème Spark est bien moins mis en avant car d’autres outils, plus spécialisés, existent sur le marché, mais il reste une option intéressante si vous utilisez déjà Spark pour d’autres aspects de votre projet. Il vous permet de traiter des données en continu, comme si vous aviez un robinet de données qui ne s’arrête jamais.

from pyspark.streaming import StreamingContext
from pyspark.sql import SparkSession

# Créer une session Spark
spark = SparkSession.builder.appName("StreamingExample").getOrCreate()
ssc = StreamingContext(spark.sparkContext, batchDuration=5)  # Toutes les 5 secondes

# Créer un flux de données à partir d'un dossier
lines = ssc.textFileStream("input_folder")

# Traiter chaque ligne du flux
lines.foreachRDD(lambda rdd: rdd.foreach(print))

# Démarrer le streaming
ssc.start()
ssc.awaitTermination()

Installez PySpark

Toujours là 👀 ? Chapeau 🎩! Mais je sens bien qu’il est temps de passer à un peu de pratique si je souhaite conserver votre attention 😉.

Passons donc à l’installation de Pyspark afin de pouvoir tranquillement nous diriger vers le traitement distribué de nos images médicales.

Étape 1 : Installer Java

Oui, Java. Spark est écrit en Scala, qui tourne sur la Java Virtual Machine (JVM). Donc, il va vous falloir installer Java 8 ou 11 si vous ne l’avez pas déjà fait. Pas de panique, vous n’aurez pas à mettre les mains dans ce langage de programmation, c'est juste pour faire tourner Spark avec votre code Python. ☕

Est-ce que j'ai déjà Java installé, et si oui, quelle version ? 🤔

Vous avez raison, commençons par là. Je vais vous guider pour vérifier ça. Rassurez-vous, c’est plus simple que de trouver une aiguille dans une botte de foin (promis). 😉

Ouvrez un terminal:

  • Sur Windows 🖥️: Appuyez sur Win + R, tapez cmd, puis appuyez sur Entrée. Bienvenue dans le monde mystérieux de l’invite de commandes. 🧙‍♂️

  • Sur Linux 🐧, je ne devrais pas avoir à vous le dire, mais bon, c’est bien parce que c’est vous: Appuyez sur Ctrl + Alt + T. Attention, vous venez juste de mettre la main sur l’outil le plus puissant au monde ! 💥

  • Sur Mac 🍏: Appuyez sur Cmd + Espace pour ouvrir Spotlight (le moteur de recherche de Mac), puis tapez "Terminal" et appuyez sur Entrée. Et hop, le terminal s’ouvre ! 🚀

Ensuite, tapez la commande suivante:

java -version

Si Java est installé, vous verrez quelque chose comme ceci :

openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)

Ici, la version est Java 11. Si vous voyez 8.x.x, c’est Java 8.

Si Java n’est pas installé, vous verrez un message du genre :

Command 'java' not found, but can be installed with:
sudo apt install openjdk-11-jre-headless  # version 11.0.11+9-0ubuntu2~20.04
sudo apt install default-jre              # version 2:1.11-72
sudo apt install openjdk-8-jre-headless   # version 8u292-b10-0ubuntu1~20.04

Dans ce cas, il faut installer Java. 😉

Et bien justement, passons à l’installation cette fois-ci !

Pour les utilisateurs de Linux/Mac 🐧🍏

Ouvrez votre terminal et tapez :

sudo apt-get update
sudo apt-get install openjdk-11-jdk

Pour les utilisateurs de Windows 🖥️

Téléchargez Java depuis le site officiel d'Oracle et suivez les instructions d'installation.

Étape 2 : Installer PySpark

Maintenant, le moment que vous attendiez tous : installer PySpark ! 🎉

Si vous ne savez pas ce qu’est un environnement virtuel ou comment en créer un, voici un lien pour réaliser cette étape.

Ouvrez votre terminal (ou votre invite de commandes) et tapez :

pip install pyspark

Et voilà ! PySpark est installé. C'était facile, non ? 😎

Étape 3 : Vérifier l'installation

Pour être sûr que tout fonctionne, on va faire un petit test. Créez un fichier Python, par exempletest_pyspark.pyet collez-y ce code : 

from pyspark.sql import SparkSession

# Créer une session Spark
spark = SparkSession.builder.appName("TestPySpark").getOrCreate()

# Créer un DataFrame simple
data = [("Alice", 1), ("Bob", 2), ("Cathy", 3)]
df = spark.createDataFrame(data, ["Name", "Age"])

# Afficher le DataFrame
df.show()

# Fermer la session Spark  
spark.stop()

Ensuite, exécutez ce script :

python test_pyspark.py

Si vous voyez un joli tableau avec les noms et les âges, félicitations ! PySpark est bien installé et fonctionne comme un charme. 🎊

Voici les étapes en screencast :

En résumé

  • Apache Spark est un framework puissant et polyvalent conçu pour le traitement distribué de données à grande échelle, ce qui en fait une solution particulièrement adaptée aux défis du Big Data.

  • Il se distingue par une vitesse impressionnante, étant jusqu'à 100 fois plus rapide que les méthodes traditionnelles grâce à son traitement en mémoire (RAM), réduisant ainsi considérablement les temps de calcul.

  • Son écosystème riche intègre une suite d'outils permettant de répondre à divers besoins en matière de traitement de données.

  • Grâce à PySpark, Spark est compatible avec Python, offrant ainsi aux utilisateurs de ce langage la possibilité d’exploiter toute la puissance du framework sans avoir à apprendre Scala, ce qui le rend plus accessible à un large public.

  • Enfin, sa scalabilité horizontale permet d'ajouter des nœuds au cluster afin d'augmenter la capacité de calcul, faisant de Spark une solution idéale pour les projets nécessitant une extensibilité accrue.

Maintenant que vous avez exploré les points forts de Spark, il est temps de plonger plus en profondeur dans son fonctionnement afin de maîtriser pleinement les nombreuses possibilités offertes par ce framework ! 🚀 

Et si vous obteniez un diplôme OpenClassrooms ?
  • Formations jusqu’à 100 % financées
  • Date de début flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous