Articles

acumulator scânteie

Spark-Accumulator

Spark-Accumulator

Introducere în Spark Accumulator

variabilele partajate sunt utilizate de Apache Spark. Când un executor cluster este trimis o sarcină de către driver, fiecare nod al clusterului primește o copie a variabilelor partajate. Există două tipuri de bază acceptate de Apache Spark de variabile partajate-Accumulator și broadcast. Apache Spark este utilizat pe scară largă și este un cadru de calcul cluster open-source. Acest lucru vine cu caracteristici cum ar fi învățarea mașinilor de calcul, streaming de API-uri și algoritmi de procesare a graficelor. Variabilele care sunt adăugate prin operații asociate sunt acumulatori. Implementarea sumelor și contoarelor este unul dintre exemplele de sarcini de acumulare și există multe alte sarcini ca atare. Tipurile numerice sunt acceptate de spark cu ușurință decât orice alt tip, dar suportul poate fi adăugat altor tipuri de către programatori.

sintaxă:

începeți cursul gratuit de știință a datelor

Hadoop, știința datelor, statistici & altele

codul de mai sus împărtășește detaliile pentru acumulatorul de clasă al PySpark.

val acc = sc.accumulator(v)

inițial v este setat la zero mai preferențial atunci când se efectuează suma r o operație de numărare.

de ce folosim acumulatorul Spark?

când un utilizator dorește să efectueze operațiuni comunicative sau asociate asupra datelor, folosim acumulatorul Spark. Acestea pot fi create fără sau cu un nume. Sparks UI ajută la vizualizarea numele creat cu accumulator și acestea pot fi, de asemenea, utile în înțelegerea progresului etapelor de rulare. Apelând SparkContext.acumulator (v), acumulatorul poate fi creat luând valoarea inițială ca v, la fel de similar cu Spark broadcast. Utilizat în implementarea sumelor și a operațiunilor de contorizare ca în funcțiile MapReduce. Acumulatorii nu sunt acceptate în Python.

Cod:

package org.spark.accumulator.crowd.now.aggregator.sample2
var lalaLines: Int = 0
sc.textFile("some log file", 4)
.forech { line =>
if (line.length() == 0) lalaLines += 1
}
println (s " Lala Lines are from the above code = $lalaLines")

în codul de mai sus, valoarea va fi zero atunci când este imprimată ieșirea codului liniilor goale. Schimbarea codului prin scânteie către fiecare executor, variabilele sunt locale pentru acel executor, iar cea mai recentă și actualizată valoare nu este returnată șoferului. Efectuarea liniilor goale ca acumulator ar putea rezolva problema de mai sus. Și asta va ajuta la actualizarea înapoi toate modificările la fiecare variabilă în fiecare executor.

curs Popular în această categorie
Apache Spark Training (3 cursuri)3 cursuri Online | 13+ ore | certificat verificabil de finalizare | acces pe viață
4.5 (5,391 evaluări)
Preț curs
vezi curs

cursuri conexe

tutoriale PySpark (3 cursuri)Apache Storm Training (1 cursuri)

codul de mai sus este scris astfel:

Cod:

package org.spark.accumulator.crowd.now.aggregator.sample2
var lalaLines = sc.accumulator(, "lala Lines")
sc.textFile("some log file", 4)
.forech { line =>
if (line.length() == 0) lalaLines += 1
}
println (s "\tlala Lines are from the above code = $lalaLines.value")
This code makes sure that the accumulator blankLine is up to date across each executor and relays back to the driver.

cum funcționează acumulatorul Spark?

variabilele de difuzare permit dezvoltatorilor Spark să păstreze o variabilă stocată în cache numai în citire securizată pe diferite noduri. Cu sarcinile necesare, doar de transport maritim o copie doar. Fără a fi nevoie să pierdeți mult timp și să transferați intrarea și ieșirea rețelei, acestea pot fi utilizate pentru a oferi unui nod o copie mare a setului de date de intrare. Variabilele de difuzare pot fi distribuite prin Spark folosind o varietate de algoritmi de acumulatori care s-ar putea transforma în mare măsură și costul comunicării este redus.

există diferite etape în executarea acțiunilor Spark. Etapele sunt apoi separate prin operație-amestecare. În fiecare etapă Spark accumulator automat datele comune trebuie să fie în cache, și ar trebui să fie serializate din care din nou va fi de-serializat de fiecare nod înainte de fiecare sarcină este rulat. Și pentru această cauză, în cazul în care variabilele de difuzare sunt create în mod explicit, mai multe sarcini în etape peste tot necesare cu aceleași date, cele de mai sus ar trebui să fie făcut.

crearea variabilei de difuzare menționată mai sus prin funcția de înfășurare SparkConext.acumulator, codul pentru acesta este:

Cod:

val accum = sc.accumulator(0)
accum: spark.Accumulator = 0
sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
accum.value
res2: Int = 20
package org.spark.accumulator.crowd.now.aggregator.sample2
object Boot {
import util.is
def main(args: Array): Unit = {
val sparkConfigiration = new Spark.Configuration(true)
.setMaster_("L")
.setNameOfApp("Analyzer Spark")
val sparkContext = new Spark.Context(spark.Configuration)
val httpStatusList = sparkContext broadcast populateHttpStatusList
val Info_http = sparkContext accumulator(0, "HTTP a")
val Success_http = sparkContext accumulator(0, "HTTP b")
val Redirect_http = sparkContext accumulator(0, "HTTP c")
val Client.Error_http = sparkContext accumulator(0, "HTTP d")
val Server.Error_http = sparkContext accumulator(0, "HTTP e")
sparkContext.tf(gClass.gRes("log").gPath,
println("THE_START")
println("HttpStatusCodes are going to be printed in result from access the log parse")
println("Http Status Info")
println("Status Success")
println("Status Redirect")
println("Client Error")
println("Server Error")
println("THE_END")
spark.Context.stop()
}
}
}

variabila difuzării se numește valoare și stochează datele utilizatorului. Variabila returnează, de asemenea, o valoare de difuzare.

accumulator_ = sc.accumulator(0)
rdd = sc.parallelize()
def f(x):
global accumulator_
accum += x
rdd.foreach(f)
accum.value

linia de comandă a acumulatorului este prezentată mai jos:

$SPARK_HOME/bin/spark-submit accumulator.py

ieșire:

exemplu de acumulator Spark

exemplu de acumulator Spark

avantajele și utilizările acumulatorului Spark

accesul la memorie este foarte direct.

  1. valorile gunoiului sunt cel mai puțin colectate în procesarea cheltuielilor generale.
  2. formatul de memorie este compact columnar.
  3. optimizarea catalizatorului de interogare.
  4. generarea de cod este întreaga etapă.
  5. avantajele compila tip țiglă de seturi de date peste date-cadre.

concluzie

am văzut conceptul de acumulator scânteie. Spark utilizează variabile partajate, pentru procesare și paralel. Pentru agregările de informații și asociațiile și operațiunile comunicative, se utilizează variabile de acumulatori. în Map-reduce, pentru însumarea contorului sau a operației putem folosi un acumulator. În timp ce în spark, variabilele sunt mutabile. Valoarea acumulatorului nu poate fi citită de executori. Dar numai programul șoferului poate. Counter în harta reduce java este similar cu acest lucru.

Articole recomandate

acesta este un ghid pentru acumulatorul Spark. Aici vom discuta Introducere la Spark acumulator și cum funcționează împreună cu avantajele și utilizările sale. De asemenea, puteți parcurge celelalte articole sugerate pentru a afla mai multe–

  1. funcții matematice JavaScript (Exemple)
  2. Top 9 tipuri de compilatoare Java
  3. Arhitectură Android | Ce este arhitectura Android?
  4. Top 9 Android Ad Blocker
1 Shares

Lasă un răspuns

Adresa ta de email nu va fi publicată.