Apache Spark combineByKey Explained



Denne Spark Hadoop-bloggen forteller deg alt du trenger å vite om Apache Spark combineByKey. Finn gjennomsnittlig poengsum per student ved hjelp av combineByKey-metoden.

Bidratt av Prithviraj Bose

Spark er et lynrask klyngeregistreringsrammeverk designet for rask beregning og etterspørselen etter profesjonelle med er betydelig i markedet i dag.Her er et kraftig API i Spark som er combineByKey .





API-skala: org.apache.spark.PairRDDFunctions.combineByKey .

Python API: pyspark.RDD.combineByKey .



API-en tar tre funksjoner (som lambda-uttrykk i Python eller anonyme funksjoner i Stige ), nemlig

  1. Lag kombinasjonsfunksjon: x
  2. Sammenslåingsverdifunksjon: y
  3. Slå kombinasjonsfunksjon: z

og API-formatet er combineByKey (x, y, z) .

La oss se et eksempel (i Scala). Den fullstendige Scala-kilden finner du her .



bruker skannerklasse i java

Vårt mål er å finne gjennomsnittlig poengsum per student.

Her er en plassholderklasse ScoreDetail lagring av studentenavn sammen med poengsummen til et emne.

Scoredetail-spark-combinebykey

Noen testdata genereres og konverteres til nøkkelparverdier der nøkkel = Elevenes navn og verdi = ScoreDetail forekomst.

Deretter lager vi en par RDD som vist i kodefragmentet nedenfor. Bare for eksperimentering har jeg opprettet en hash-partisjonering av størrelse 3, så de tre partisjonene vil inneholde henholdsvis 2, 2 og 4 nøkkelverdipar. Dette er markert i delen der vi utforsker hver partisjon.

Nå kan vi utforske hver partisjon. Den første linjen skriver ut lengden på hver partisjon (antall nøkkelverdipar per partisjon), og den andre linjen skriver ut innholdet i hver partisjon.

hvordan du bruker skannerklasse i java

Og her er finalebevegelsen der vi beregner gjennomsnittlig poengsum per student etter å ha kombinert partiturene på tvers av partisjonene.

Ovennevnte kodestrøm er som følger ...
Først må vi lage en kombinasjonsfunksjon som egentlig er en tuple = (verdi, 1) for hver nøkkel som oppstår i hver partisjon. Etter denne fasen er utgangen for hver (nøkkel, verdi) i en partisjon (nøkkel, (verdi, 1)).

Så på neste iterasjon blir kombinasjonsfunksjonene per partisjon slått sammen ved hjelp av fletteverdifunksjonen for hver tast. Etter denne fasen er utgangen til hver (nøkkel, (verdi, 1)) (nøkkel, (totalt, telle)) i hver partisjon.

Til slutt smelter kombinasjonsfunksjonen alle verdiene på tvers av partisjonene i utførerne og sender dataene tilbake til driveren. Etter denne fasen er utgangen av hver (nøkkel, (totalt, antall)) per partisjon
(nøkkel, (totalAcrossAllPartitions, countAcrossAllPartitions)).

Kartet konverterer
(nøkkel, tuple) = (nøkkel, (totalAcrossAllPartitions, countAcrossAllPartitions))
for å beregne gjennomsnittet per nøkkel som (nøkkel, tuple._1 / tuple._2).

Den siste linjen skriver ut gjennomsnittspoengene for alle studentene på slutten av føreren.

Har du et spørsmål til oss? Nevn dem i kommentarseksjonen, så kommer vi tilbake til deg.

Relaterte innlegg:

Avmystifiserende partisjonering i Spark