Explication des accumulateurs Spark: Apache Spark

Ce blog Apache Spark explique en détail les accumulateurs Spark. Apprenez à utiliser les accumulateurs Spark avec des exemples. Les accumulateurs à étincelles sont comme les compteurs Hadoop Mapreduce.

Contribution de Prithviraj Bose



Voici un blog sur tout ce que vous devez savoir sur les accumulateurs Spark.Avec étant une compétence clé recherchée par la plupart des recruteurs informatiques, sa croissance et sa demande dans l'industrie ont été exponentielles depuis sa création.



Que sont les accumulateurs?

Les accumulateurs sont des variables utilisées pour agréger des informations entre les exécuteurs. Par exemple, ces informations peuvent concerner des données ou un diagnostic d'API, comme le nombre d'enregistrements corrompus ou le nombre de fois qu'une API de bibliothèque particulière a été appelée.

Pour comprendre pourquoi nous avons besoin d’accumulateurs, voyons un petit exemple.



Voici un journal imaginaire des transactions d'une chaîne de magasins dans la région centrale de Kolkata.

logs-Spark-accumulators

Il y a 4 champs,

Champ 1 -> Ville



Champ 2 -> Localité

Champ 3 -> Catégorie d'article vendu

Champ 4 -> Valeur de l'article vendu

tableau périodique des outils devops

Cependant, les journaux peuvent être corrompus. Par exemple, la deuxième ligne est une ligne vide, la quatrième ligne signale des problèmes de réseau et enfin la dernière ligne affiche une valeur de vente de zéro (ce qui ne peut pas arriver!).

Nous pouvons utiliser des accumulateurs pour analyser le journal des transactions pour connaître le nombre de journaux vierges (lignes vierges), le nombre de fois où le réseau a échoué, tout produit qui n'a pas de catégorie ou même le nombre de fois où aucune vente n'a été enregistrée. L'exemple de journal complet peut être trouvé Ici .
Les accumulateurs sont applicables à toute opération qui est,
1. Commutatif -> f (x, y) = f (y, x) , et
2. Associatif -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Par exemple, somme et max les fonctions satisfont aux conditions ci-dessus alors que moyenne ne fait pas.

Pourquoi utiliser des accumulateurs Spark?

Maintenant, pourquoi avons-nous besoin d'accumulateurs et pourquoi ne pas simplement utiliser des variables comme indiqué dans le code ci-dessous.

Le problème avec le code ci-dessus est que lorsque le pilote imprime la variable blankLines sa valeur sera zéro. Cela est dû au fait que lorsque Spark expédie ce code à chaque exécuteur, les variables deviennent locales à cet exécuteur et sa valeur mise à jour n'est pas renvoyée au pilote. Pour éviter ce problème, nous devons faire blankLines un accumulateur tel que toutes les mises à jour de cette variable dans chaque exécuteur soient retransmises au pilote. Donc, le code ci-dessus doit être écrit comme suit:

Cela garantit que l'accumulateur blankLines est mis à jour dans chaque exécuteur et les mises à jour sont renvoyées au pilote.

Nous pouvons implémenter d'autres compteurs pour les erreurs de réseau ou la valeur de vente nulle, etc. Le code source complet ainsi que l'implémentation des autres compteurs peuvent être trouvés Ici .

Les personnes familiarisées avec Hadoop Map-Reduce remarqueront que les accumulateurs de Spark sont similaires aux compteurs Map-Reduce de Hadoop.

Mises en garde

Lors de l'utilisation d'accumulateurs, il y a quelques mises en garde dont nous, les programmeurs, devons être conscients,

  1. Calculs à l'intérieur transformations sont évalués paresseusement, donc à moins qu'un action se produit sur le RDD le transformations ne sont pas exécutés. En conséquence, les accumulateurs utilisés à l'intérieur des fonctions comme carte() ou filtre() ne sera pas exécuté à moins que certains action se produire sur le RDD.
  2. Spark garantit la mise à jour des accumulateurs à l'intérieur Actions juste une fois . Ainsi, même si une tâche est redémarrée et que la lignée est recalculée, les accumulateurs ne seront mis à jour qu'une seule fois.
  3. Spark ne garantit pas cela pour transformations . Ainsi, si une tâche est redémarrée et que la lignée est recalculée, il y a des chances d'effets secondaires indésirables lorsque les accumulateurs seront mis à jour plus d'une fois.

Par mesure de sécurité, utilisez toujours des accumulateurs à l'intérieur des actions UNIQUEMENT.
Le code Ici montre un exemple simple mais efficace sur la façon d'y parvenir.
Pour plus d'informations sur les accumulateurs, lisez cette .

Vous avez une question pour nous? Mentionnez-les dans la section commentaires et nous vous répondrons.

comment imprimer un tableau php

Articles Similaires:

Apache Spark combineByKey expliqué