Knoldus Inc.
Knoldus Inc.

volgen

Apr 30, 2016 * 2 min gelezen

als documentatie voor Spark Broadcast variabelen Staten, Ze zijn onveranderlijke gedeelde variabele die in de cache op elke werknemer knooppunten op een Spark cluster. In deze blog zullen we een eenvoudig gebruik van uitzendvariabelen demonstreren.

Wanneer moet Broadcast-variabele worden gebruikt?

zie een probleem als het tellen van grammaticale elementen voor willekeurige Engelse alinea’ s, documenten of bestanden. Stel dat je de afbeelding van elk woord als een specifiek grammaticale element hebt, zoals:

val dictionary = Map ((“man” – > “zelfstandig naamwoord”), (“is”->”werkwoord”), (“sterfelijk”-> “bijvoeglijk naamwoord”))
laten we eens denken aan een functie die de telling van elk grammaticale element voor een bepaald woord retourneert.

def getElementsCount(word :String, dictionary:Map):(String,Int) = {
dictionary.filter{ case (wording, wordType) = > wording.is gelijk aan ((woord))}.kaart (x = > (x. _2,1)).headOption.getOrElse ((“onbekend” -> 1)) //enige dummy logica
}
en gebruik deze functie om elk grammaticale element te tellen voor de volgende gegevens:

val words = sc.parallelliseren(Array (“de mens”, “is”, “sterfelijk”, “sterfelijk”)”,”1234″,”789″,”456″,” is”, “man”)
val grammarElementCounts = woorden.map (word = > getElementsCount (word,dictionary)).reduceByKey ((x,y) => x+y)
voordat elke taak op de beschikbare uitvoerders wordt uitgevoerd, berekent Spark de afsluiting van de taak. De afsluiting is die variabelen en methoden die zichtbaar moeten zijn voor de uitvoerder om zijn berekeningen uit te voeren op de RDD.

in het bovenstaande fragment hebben we het woordenboek als waarde naar de functie gestuurd. Dit is in orde totdat we het lokaal draaien op enkele uitvoerder. In cluster omgeving, Het zal vonk geven een enorme communicatie en berekenen Last wanneer dit woordenboek nodig zal zijn door elke uitvoerder. Spark zendt automatisch de gemeenschappelijke gegevens die nodig zijn door taken binnen elke fase. De gegevens die op deze manier worden uitgezonden, worden gecached in seriële vorm en gedeserialiseerd voordat elke taak wordt uitgevoerd.

vermoedelijk hadden we een groot Engels woordenboek met elk mogelijk woord met zijn grammaticale illustratie, de kosten zouden meer zijn geweest als we het als ruwe waarde met sluitingen verzenden. Als documentatie reciteert, is het expliciet aanmaken van broadcast variabelen alleen nuttig wanneer taken in meerdere fasen dezelfde gegevens nodig hebben of wanneer het cachen van de gegevens in gedeserialiseerde vorm belangrijk is.

hoe Broadcast-variabelen maken en gebruiken?

Broadcast variabelen zijn wrappers rond elke waarde die moet worden uitgezonden. Meer specifiek zijn ze van het type: org.Apache.Vonk.uitzending.Broadcast and can be created by calling:

val broadCastDictionary = sc.broadcast (dictionary)
de variabele broadCastDictionary wordt slechts één keer naar elk knooppunt verzonden. De waarde kan worden benaderd door de methode aan te roepen .value () op broadcast variabelen. Laten we een kleine verandering aanbrengen in onze methode getElementsCount die er nu uitziet als:

def getElementsCount (word: String, dictionary: org.Apache.Vonk.uitzending.Broadcast]): (String,Int) = {
woordenboek.waarde.filter{ case (wording, wordType) = > wording.is gelijk aan ((woord))}.kaart (x = > (x. _2,1)).headOption.getOrElse ((“onbekend” -> 1))
}
in plaats van het raw woordenboek te versturen zullen we broadCastDictionary passeren met woorden RDDs.

woorden.map (word = > getElementsCount (word,broadCastDictionary)).reduceByKey ((x,y) => x+y)
bij verzamelen zou het resultaat zijn:

Array = Array ((adjectief, 2), (zelfstandig naamwoord, 2), (onbekend, 3), (werkwoord,2))

dingen om te onthouden tijdens het gebruik van Broadcast variabelen:

zodra we de waarde naar de knooppunten hebben uitgezonden, moeten we geen wijzigingen aanbrengen in de waarde om ervoor te zorgen dat elk knooppunt exact dezelfde kopie van gegevens heeft. De gewijzigde waarde kan later worden verzonden naar een ander knooppunt dat onverwachte resultaten zou geven.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.