Utilisation de la diffusion sur les jointures Spark
N'oubliez pas que les jointures de tableaux dans Spark sont réparties entre les travailleurs du cluster. Si les données ne sont pas locales, diverses opérations de brassage sont nécessaires et peuvent avoir un impact négatif sur les performances. Au lieu de cela, nous allons utiliser les opérations broadcast
de Spark pour donner à chaque nœud une copie des données spécifiées.
Quelques conseils :
- Diffusez le DataFrame plus petit. Plus le DataFrame est grand, plus le temps de transfert vers les nœuds de travail est important.
- Sur les DataFrame de petite taille, il peut être préférable d'ignorer la diffusion et de laisser Spark se débrouiller tout seul pour l'optimisation.
- Si vous regardez le plan d'exécution de la requête, un broadcastHashJoin indique que vous avez configuré avec succès la diffusion.
Les DataFrame 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()
à partir depyspark.sql.functions
. - Créez un nouveau DataFrame
broadcast_df
en joignantflights_df
àairports_df
, à l'aide de la diffusion. - Montrez le plan d'interrogation et tenez compte des différences par rapport à 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.____()