Fermer

janvier 6, 2024

Opérations Spark RDD

Opérations Spark RDD


Une compréhension globale de la transformation et de l’action de Spark est cruciale pour un code Spark efficace. Ce blog donne un aperçu des aspects fondamentaux de Spark.

Avant de plonger dans la transformation et l’action de Spark, jetons un coup d’œil à RDD et Dataframe.

Ensemble de données distribuées résilientes (RDD) : Habituellement, les tâches Spark fonctionnent sur des RDD, qui sont des partitions tolérantes aux pannes d’opérations simultanées. Les RDD sont immuables (une fois qu’un RDD est créé, il ne peut pas être modifié).

Trame de données: Un Dataframe est une structure de données Spark qui partage l’équivalence conceptuelle avec une table dans une base de données relationnelle mais intègre des optimisations plus avancées en interne. Des fichiers de données structurés tels que des bases de données externes ou des RDD existants, CSV, parquet, etc., peuvent être utilisés pour construire un Dataframe. Le Dataframe est généré et manipulé via l’API Dataframe.

Briefing de la transformation et de l’action de Spark :

Les RDD facilitent deux catégories d’opérations : Les opérations Spark RDD sont la Transformation et les Actions. Transformationsqui crée un nouvel ensemble de données à partir d’un ensemble existant, et Actionsqui renvoient une valeur au programme pilote après avoir exécuté un calcul sur l’ensemble de données.

Différence clé entre transformations et actions : Les transformations sont des opérations de logique métier qui n’induisent pas d’exécution, tandis que les actions sont des déclencheurs d’exécution axés sur le retour de résultats.

Transformations

Dans Spark, les transformations gèrent la création d’un nouvel ensemble de données à partir d’un ensemble existant. Lorsqu’une transformation est exécutée, elle se produit dans un ou plusieurs RDD. Les transformations sont évaluées paresseusement, c’est-à-dire qu’elles ne démarrent pas tant que l’action Spark n’est pas appelée sur RDD. Étant donné que les RDD sont de nature immuable, les transformations créent toujours un nouveau RDD sans mettre à jour un RDD existant. Cela crée donc un Lignée RDD.

Généralement, la transformation est de deux types :

  1. Transformations étroites :

Les transformations étroites sont des opérations sur les RDD où chaque partition d’entrée ne contribue qu’à une seule partition de sortie, souvent sur le même exécuteur. Les transformations étroites permettent à Spark d’exécuter des calculs au sein d’une seule partition sans avoir besoin de mélanger ou de redistribuer les données sur le cluster. Des exemples de transformations étroites incluent map, filteuh, flatMap, union, distinct, fusionner, etc.

Étroit

Cas d’utilisation :

  • Opérations qui ne nécessitent pas de brassage ou de réorganisation des données au sein des partitions.
  • Transformations comme map, filter, flatMap, union, etc.

Les meilleures pratiques:

  • Préféré pour le traitement au sein de partitions sans mouvement de données.
  • Efficace pour les transformations simples et lorsque la localisation des données est critique.
  • Convient aux calculs qui ne nécessitent pas de données provenant de plusieurs partitions.
  1. Transformations étendues :

Les transformations étendues sont des opérations sur les RDD qui nécessitent les données de plusieurs partitions pour créer une seule partition pour la sortie. Ces transformations impliquent le mélange ou la redistribution des données entre les partitions, conduisant potentiellement à une limite de scène ou à une communication réseau entre les exécuteurs. Des exemples de transformations étendues incluent groupByKey, réduireByKey, sortByKey, join, cogroup, repartition, etc.

Large

Cas d’utilisation :

  • Opérations impliquant un brassage de données, telles que groupBy, join, reductionByKey, sortByKey, etc.
  • Agrégations, jointures ou opérations nécessitant un échange de données entre les partitions.

Les meilleures pratiques:

  • À utiliser lors de l’agrégation de données sur des partitions ou de la jonction d’ensembles de données sur des clés.
  • Efficace pour les opérations qui impliquent un remaniement ou une réorganisation des données.
  • Efficace pour les transformations complexes nécessitant des données provenant de plusieurs partitions.

Principales différences :

  • Dépendance : les transformations étroites fonctionnent indépendamment au sein de chaque partition, tandis que les transformations larges dépendent des données de plusieurs partitions.
  • Mélange : les transformations étroites évitent de mélanger les données entre les partitions, tandis que les transformations larges peuvent impliquer le mélange des données dans le cluster.
  • Parallélisme : des transformations étroites permettent à Spark d’exécuter des tâches en parallèle au sein de partitions, ce qui entraîne de meilleures performances dans certains scénarios. Des transformations étendues peuvent introduire une limite d’étape, affectant le parallélisme et pouvant entraîner une surcharge de performances due au brassage des données.

Comprendre ces distinctions est crucial lors de la conception de tâches Spark afin d’optimiser les performances et de minimiser le brassage inutile des données, en particulier dans le calcul distribué à grande échelle.

Actions

Les actions sont des opérations qui déclenchent l’exécution de la lignée Spark DAG (Directed Acyclic Graph) créée par les transformations. Lorsqu’une action est appelée, Spark calcule les résultats des transformations et effectue les calculs nécessaires pour renvoyer un résultat au programme pilote ou pour conserver les données. Les actions amènent Spark à démarrer le calcul sur les RDD et peuvent déclencher l’exécution d’une tâche. Des exemples d’actions incluent la collecte, le comptage, la sauvegarde sous forme de fichier, l’affichage, etc.

Les meilleures pratiques:

  • Évitez les actions inutiles : limitez les actions aux étapes essentielles. Des actions inutiles peuvent déclencher des calculs inutiles, ce qui a un impact sur les performances.
  • Action après des transformations étroites : préférez les actions après des transformations étroites pour retarder les calculs jusqu’à ce que cela soit nécessaire.
  • Optimisez les actions avec la mise en cache : utilisez la mise en cache ou la persistance pour éviter le recalcul de RDD/DataFrame si plusieurs actions sont nécessaires sur le même ensemble de données.

Actions déclenchant des transformations :

  • Modèle d’exécution différée : lorsqu’elles sont invoquées, des actions telles que collect, count ou saveAsTextFile déclenchent l’exécution de toute la lignée de transformations menant à cette action dans le modèle d’évaluation paresseuse de Spark, qui reporte le calcul jusqu’à ce qu’une action soit déclenchée.
  • Exécution d’action : Spark analyse le DAG, identifie la chaîne de transformations requise pour calculer le résultat et planifie le plan d’exécution sur l’ensemble du cluster lorsqu’il appelle une action.

Explorer les transformations et actions Spark courantes

Vous trouverez ci-dessous quelques exemples illustrant diverses transformations et actions Spark ainsi que des explications de leurs comportements dans Spark à l’aide de Scala.

Création d’un ensemble de données commun :

Création Df

Transformations étroites :

  • sélectionnéDF: Sélectionner la transformation réduit les colonnes.

Sélectionnédf

  • mappéDF: La transformation de carte applique une fonction à chaque élément dans les partitions.

Mappédf

  • filtréDF: Transformation de filtre fonctionne sur chaque partition indépendamment.

Filtrédf

Transformations étendues :

  • UnitedDF: La transformation Union combine les données de deux Dataframe, potentiellement sur plusieurs partitions.

Unioneddf

  • groupéDF: La transformation GroupBy regroupe les données par colonne, ce qui permet de mélanger potentiellement les données entre les partitions.

Groupeddf

  • triéDF: SortBy la transformation réorganise les données, à travers partitions, en fonction de la colonne spécifiée.

Triédf

Actions:

  • Données collectées: L’action de collecte récupère tous les enregistrements Dataframe vers le pilote.

Données collectées

  • compter: L’action Count compte le nombre d’enregistrements dans le Dataframe.

Compter

  • premierEnregistrement: La première action récupère le premier enregistrement du DataFrame.

Premiers enregistrements

  • F1erDeuxEnregistrements: Take action récupère les premiers « n » enregistrements sous forme de tableau.

Deux premiers enregistrements

Résumé:

Pour résumer, les opérations Spark RDD sont des transformations et des actions. Les transformations spécifient les modifications apportées aux RDD sans calcul immédiat, tandis que les actions démarrent l’exécution de ces transformations, donnant un résultat.

Envisagez dans Spark d’appliquer des transformations telles que map, filter et groupBy à un RDD. Ces transformations restent dormantes jusqu’à ce qu’une action, comme collecter ou compter, soit déclenchée. À ce stade, Spark traite les transformations en effectuant les calculs nécessaires pour produire le résultat ou effectuer les opérations désignées.






Source link