∈"> ∉"> →"> ←"> ]>
Framework de calcul distribué
On s'intéresse ici à l'API « core » qui se place au même niveau que Map/Reduce. Les autres composants (SQL, Streaming, Machine Learning) sont construits au dessus.
Problèmes d'interface avec le programmeur :
Problèmes de performances :
Supposons une transformation qui s'exécute comme une opération M suivie de R1 et une autre qui s'éxécute comme M suivi de R2
Si on veut les 2 résultats, on va calculer 2 fois M
Si on ne veut pas calculer 2 fois M :
Un Resilient Distributed Data Set (ensemble de données distribué persistent) est une abstraction de haut niveau qui représente un calcul (et non pas son résultat) sur des données
Les RDDs sont à la base des transformations Spark
Le chargement des données crées un nouveau RDD (les données ne sont pas chargée, on crée juste une structure qui, quand elle sera évaluée chargera les données
On peut composer ds RDDs au moyen de transformations
On peut exécuter une action sur un RDD. Cela déclanche le calcul de toute la transformation pour obtenir un résultat final
Pour initialiser Spark, il faut (en toute généralité) commencer par initialiser Hadoop (si on souhaite que les données et les résultats soient stockés de façon distribuée sur Hadoop), puis démarer le service Spark. (cf la feuille de TP).
Une fois le service spark lancé, on peut écrire un fichier python comme celui ci:
from pyspark import SparkConf, SparkContext
conf = SparkConf().setAppName("Exercice 1").setMaster("local")
sc = SparkContext(conf=conf)
La variable sc est le contexte Spark et va nous permettre de créer des RDD
On peut créer un RDD de plusieurs manière :
Des fonctions plus avancées permettent aussi de créer des RDD depuis des tables SQL, des fichiers binaires, …
Les fonctions de transformation sont les itérateurs Scala, plus quelques nouveaux:
Les actions exécutent le RDD auquels elles sont appliquées pour renvoyer un résultat:
Spark est fourni avec des interpréteurs standards pour Scala, Python et R. Ce sont les interpréteurs normaux, dans lesquels sont préchargés les bibliothèques pour Spark.
Pour exécuter un programme Scala, on peut aussi l'exporter comme un jar et utiliser la commande spark-submit pour l'exécuter.