Utiliser le broadcasting dans les jointures Spark
Rappelez-vous que les jointures de tables dans Spark sont réparties entre les workers du cluster. Si les données ne sont pas locales, diverses opérations de shuffle sont nécessaires et peuvent dégrader les performances. À la place, nous allons utiliser l’opération broadcast de Spark pour donner à chaque nœud une copie des données spécifiées.
Quelques conseils :
- Diffusez le DataFrame le plus petit. Plus le DataFrame est volumineux, plus le transfert vers les nœuds workers prendra du temps.
- Sur de petits DataFrames, il peut être préférable de ne pas diffuser et de laisser Spark déterminer lui-même les optimisations.
- Si vous examinez le plan d’exécution de la requête, un broadcastHashJoin indique que vous avez correctement configuré la diffusion (broadcast).
Les DataFrames flights_df et airports_df sont à votre disposition.
Cet exercice fait partie du cours
Nettoyer des données avec PySpark
Instructions
- Importez la méthode
broadcast()depuispyspark.sql.functions. - Créez un nouveau DataFrame
broadcast_dfen joignantflights_dfavecairports_df, en utilisant le broadcasting. - Affichez le plan de requête et comparez-le avec l’original.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Import the broadcast method from pyspark.sql.functions
from ____ import ____
# Join the flights_df and airports_df DataFrames using broadcasting
broadcast_df = flights_df.____(____(airports_df), \
flights_df["Destination Airport"] == airports_df["IATA"] )
# Show the query plan and compare against the original
broadcast_df.____()