!pip install pysparkLab 1 : Transformations et actions sur les RDD
Ce lab vous fait découvrir l’API RDD d’Apache Spark avec PySpark. Exécutez les cellules dans l’ordre avec Maj + Entrée. La première cellule installe PySpark.
Les cellules de code laissées vides sont prévues pour vos réponses. Pour comprendre le comportement d’une opération, observez à la fois son résultat et le type de dépendance entre les partitions.
Objectifs
- créer un RDD à partir d’une collection Python ;
- distinguer une transformation d’une action ;
- reconnaître une dépendance étroite (narrow) et une dépendance large (wide) ;
- choisir une action adaptée à la taille du résultat.
Consultez la documentation PySpark sur les RDD au besoin.
Point d’entrée : SparkContext
SparkContext est le point d’entrée de l’API RDD. Il relie le programme au moteur Spark et permet notamment de créer des RDD.
Dans la cellule suivante, getOrCreate() récupère le contexte existant ou en crée un. En mode local, Spark exécute les tâches sur la machine qui héberge le notebook. Le parallélisme dépend du nombre de cœurs ou de threads configurés pour cette exécution.
from pyspark import SparkContext
sc = SparkContext.getOrCreate()Partie 1 - Transformations et actions
Le jeu de données books contient un tuple par livre, sous la forme (titre, auteur, année de publication, genre, prix). Vous allez créer un RDD, le transformer, puis demander des résultats avec différentes actions.
books = [
("Les Misérables", "Victor Hugo", 1862, "Roman", 12.99),
("Le Rouge et le Noir", "Stendhal", 1830, "Roman", 9.99),
("Candide", "Voltaire", 1759, "Philosophie", 8.99),
("L'Étranger", "Albert Camus", 1942, "Roman", 10.99),
("Le Père Goriot", "Honoré de Balzac", 1834, "Roman", 7.99),
("Discours de la méthode", "René Descartes", 1637, "Philosophie", 15.99),
]Question 1 - Créer un RDD
Créez un RDD nommé books_rdd à partir de la liste books.
Question 2 - Filtrer les livres publiés après 1900
À partir de books_rdd, utilisez filter pour conserver uniquement les livres publiés strictement après 1900, puis collect() pour afficher le résultat.
Question 3 - Extraire les titres
Utilisez map pour extraire le titre de chaque livre, puis collect() pour récupérer les titres dans le programme principal.
Répondez ensuite aux questions suivantes :
mapest-elle une transformation ou une action ?- Sa dépendance est-elle étroite (narrow) ou large (wide) ?
- Que risque-t-on si le résultat de
collect()est trop volumineux pour tenir dans la mémoire du driver ?
Question 4 - Compter les livres
Utilisez une action pour compter le nombre de livres dans le RDD.
- Cette opération est-elle une transformation ou une action ?
- Le résultat de cette action est-il un nouveau RDD ? Les données sont-elles conservées en mémoire automatiquement ?
Question 5 - Trouver les genres distincts
Utilisez distinct() pour obtenir les genres présents dans le jeu de données.
distinct()est-elle une dépendance étroite (narrow) ou large (wide) ?- Pourquoi cette opération peut-elle nécessiter un échange de données (shuffle) entre partitions ?
Partie 2 - Calculs de chiffre d’affaires
Le RDD sales_rdd contient un tuple par produit, sous la forme (produit, catégorie, chiffre d’affaires). Utilisez des transformations pour préparer les valeurs, puis une action pour obtenir chaque résultat.
sales_rdd = sc.parallelize(
[("PDT 1", "CAT 1", 200),
("PDT 2", "CAT 1", 100),
("PDT 3", "CAT 2", 300),
("PDT 4", "CAT 2", 350),
("PDT 5", "CAT 2", 250)]
)Données du problème
Les cinq produits sont répartis entre deux catégories. Le chiffre d’affaires est la troisième valeur de chaque tuple. Appuyez-vous sur la structure de ces tuples pour construire vos calculs.
Question 1 - Chiffre d’affaires de la catégorie 2
Calculez le chiffre d’affaires total des produits de la catégorie CAT 2.
Question 2 - Chiffre d’affaires par catégorie
Calculez le chiffre d’affaires total séparément pour chaque catégorie. Le résultat attendu comporte une valeur agrégée par catégorie.
Question 3 - Chiffre d’affaires moyen par produit
Calculez la moyenne des chiffres d’affaires des produits, c’est-à-dire la moyenne de la troisième valeur des tuples du RDD.