
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 ! đ±
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.
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. đ
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()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()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()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()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.
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.04Dans 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-jdkPour les utilisateurs de Windows đ„ïž
Téléchargez Java depuis le site officiel d'Oracle et suivez les instructions d'installation.
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 pysparkEt voilĂ ! PySpark est installĂ©. C'Ă©tait facile, non ? đ
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.pySi 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 :
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 ! đÂ