Apache Spark combineByKey forklaret



Denne Spark Hadoop-blog fortæller dig alt hvad du behøver at vide om Apache Spark combineByKey. Find den gennemsnitlige score pr. Studerende ved hjælp af combineByKey-metoden.

Bidrag fra Prithviraj Bose

Spark er en lynhurtig klyngecomputerramme designet til hurtig beregning og efterspørgslen efter professionelle med er betydelig på markedet i dag.Her er en kraftfuld API i Spark, som er combineByKey .





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

Python API: pyspark.RDD.combineByKey .



API'en tager tre funktioner (som lambda-udtryk i Python eller anonyme funktioner i Stige ), nemlig

  1. Opret kombinationsfunktion: x
  2. Fletværdifunktion: y
  3. Flet kombinationsfunktioner: z

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

Lad os se et eksempel (i Scala). Den fulde Scala-kilde kan findes her .



Vores mål er at finde den gennemsnitlige score pr. Studerende.

Her er en pladsholderklasse ScoreDetail lagring af elevers navn sammen med score på et emne.

Scoredetail-spark-combinebykey

scanner klasse i java eksempler

Nogle testdata genereres og konverteres til nøgleparværdier hvor nøgle = studerendes navn og værdi = ScoreDetail eksempel.

Derefter opretter vi et par RDD som vist i kodefragmentet nedenfor. Bare til eksperimentering har jeg oprettet en hash-partitioner af størrelse 3, så de tre partitioner indeholder henholdsvis 2, 2 og 4 nøgleværdipar. Dette fremhæves i det afsnit, hvor vi udforsker hver partition.

Nu kan vi udforske hver partition. Den første linje udskriver længden af ​​hver partition (antal nøgleværdipar pr. Partition), og den anden linje udskriver indholdet af hver partition.

Og her er den sidste sats, hvor vi beregner den gennemsnitlige score pr. Studerende efter at have kombineret scores på tværs af partitionerne.

Ovenstående kodestrøm er som følger ...
Først skal vi oprette en kombinationsfunktion, der i det væsentlige er en tuple = (værdi, 1) for hver nøgle, der opstår i hver partition. Efter denne fase er output for hver (nøgle, værdi) i en partition (nøgle, (værdi, 1)).

Derefter flettes kombinationsfunktionerne pr. Partition ved den næste iteration ved hjælp af fletningsfunktionen for hver tast. Efter denne fase er output for hver (nøgle, (værdi, 1)) (nøgle, (total, antal)) i hver partition.

Endelig fletter kombinationsfunktionen alle værdier på tværs af partitionerne i eksekutørerne og sender dataene tilbage til driveren. Efter denne fase er output for hver (nøgle, (total, antal)) pr. Partition
(nøgle, (totalAcrossAllPartitions, countAcrossAllPartitions)).

Kortet konverterer
(nøgle, tuple) = (nøgle, (totalAcrossAllPartitions, countAcrossAllPartitions))
at beregne gennemsnittet pr. nøgle som (nøgle, tuple._1 / tuple._2).

Den sidste linje udskriver gennemsnittet for alle eleverne ved førerens afslutning.

Har du et spørgsmål til os? Nævn dem i kommentarsektionen, så vender vi tilbage til dig.

Relaterede indlæg:

Afmystificering af partitionering i gnist