Acumuladors d’espurna explicats: Apache Spark

Aquest blog d’Apache Spark explica detalladament els acumuladors d’espurnes. Apreneu l’ús de l’acumulador d’espurnes amb exemples. Els acumuladors d’espurnes són com els comptadors Hadoop Mapreduce.

Aportat per Prithviraj Bose



Aquí teniu un bloc sobre allò que heu de saber sobre els acumuladors de Spark.Amb en ser una habilitat clau a la qual busquen la majoria dels reclutadors de TI, el seu creixement i demanda a la indústria ha estat exponencial des dels seus inicis.



Què són els acumuladors?

Els acumuladors són variables que s’utilitzen per agregar informació entre els executors. Per exemple, aquesta informació pot pertànyer al diagnòstic de dades o API, com ara quants registres estan danyats o quantes vegades es va cridar una API de biblioteca determinada.

Per entendre per què necessitem acumuladors, vegem un petit exemple.



Aquí teniu un registre imaginari de transaccions d’una cadena de botigues a la regió central de Calcuta.

python què és __init__
logs-Spark-accumulators

Hi ha 4 camps,

Camp 1 -> Ciutat



Camp 2 -> Localitat

Camp 3 -> Categoria de l'article venut

Camp 4 -> Valor de l'article venut

No obstant això, els registres es poden danyar. Per exemple, la segona línia és una línia en blanc, la quarta línia informa d'alguns problemes de xarxa i, finalment, l'última línia mostra un valor de vendes de zero (cosa que no pot passar).

Podem utilitzar acumuladors per analitzar el registre de transaccions per esbrinar el nombre de registres en blanc (línies en blanc), el nombre de vegades que ha fallat la xarxa, qualsevol producte que no tingui una categoria o fins i tot el nombre de vegades que es van registrar vendes zero. Es pot trobar el registre de mostra complet aquí .
Els acumuladors són aplicables a qualsevol operació que sigui,
1. Conmutatiu -> f (x, y) = f (i, x) , i
2. Associatiu -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Per exemple, suma i màx les funcions compleixen les condicions anteriors mentre que mitjana no ho fa.

acoblament estret vs acoblament fluix

Per què utilitzar els acumuladors d’espurnes?

Ara bé, per què necessitem acumuladors i per què no només fem servir variables tal com es mostra al codi següent.

El problema amb el codi anterior és que quan el controlador imprimeix la variable línies en blanc el seu valor serà zero. Això es deu al fet que quan Spark envia aquest codi a tots els executors, les variables es tornen locals a l'executor i el seu valor actualitzat no es retransmet al controlador. Per evitar aquest problema, hem de fer-ho línies en blanc un acumulador de tal manera que totes les actualitzacions d'aquesta variable en cada executor es retransmeten al controlador. Per tant, el codi anterior s’ha d’escriure com:

Això garanteix que l’acumulador línies en blanc s'actualitza a tots els executors i les actualitzacions es retransmeten al controlador.

què és un fil de dimoni

Podem implementar altres comptadors per a errors de xarxa o valor de vendes zero, etc. Es pot trobar el codi font complet junt amb la implementació dels altres comptadors aquí .

Les persones familiaritzades amb Hadoop Map-Reduce notaran que els acumuladors de Spark són similars als comptadors de Hadoop Map-Reduce.

Advertiments

Quan s’utilitzen acumuladors, hi ha algunes advertències que els programadors hem de tenir en compte,

  1. Càlculs a l'interior transformacions s’avaluen mandrosament, de manera que llevat que un acció passa al RDD el transformacions no s’executen. Com a resultat d'això, els acumuladors s'utilitzaven dins de funcions com mapa () o bé filter () no seran executats tret que alguns acció succeeix al RDD.
  2. Spark garanteix l'actualització dels acumuladors dins accions només una vegada . Així, fins i tot si es reinicia una tasca i es torna a calcular el llinatge, els acumuladors només s’actualitzaran una vegada.
  3. Spark no ho garanteix per a transformacions . Per tant, si es reinicia una tasca i es torna a calcular el llinatge, hi ha possibilitats d’efectes secundaris indesitjables quan els acumuladors s’actualitzaran més d’una vegada.

Per estar segur, utilitzeu sempre acumuladors NOMÉS en accions.
El codi aquí mostra un exemple senzill però eficaç de com aconseguir-ho.
Per obtenir més informació sobre els acumuladors, llegiu això .

Tens alguna pregunta? Esmenteu-los a la secció de comentaris i us respondrem.

Articles Relacionats:

Apache Spark combineByKey explicat