Apache Spark combByKey uitgelegd



Deze Spark Hadoop-blog vertelt je alles wat je moet weten over Apache Spark combByKey. Zoek de gemiddelde score per leerling met de methode CombByKey.

Bijgedragen door Prithviraj Bose

Spark is een razendsnel clustercomputerkader dat is ontworpen voor snelle berekeningen en de vraag naar professionals met is tegenwoordig aanzienlijk op de markt.Hier is een krachtige API in Spark, namelijk combinerenByKey .





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

Python-API: pyspark.RDD.combineByKey .



De API heeft drie functies (zoals lambda-uitdrukkingen in Python of anonieme functies in Ladder ), namelijk,

  1. Creëer combinerfunctie: x
  2. Waarde samenvoegen functie: y
  3. Combineerfunctie samenvoegen: z

en het API-formaat is combinerenByKey (x, y, z) .

Laten we een voorbeeld bekijken (in Scala). De volledige Scala-bron kan worden gevonden hier .



definitief definitief en finaliseren in java

Ons doel is om de gemiddelde score per student te vinden.

Hier is een placeholder-klasse ScoreDetail het opslaan van de naam van de student samen met de score van een onderwerp.

Scoredetail-spark-combinebykey

Sommige testgegevens worden gegenereerd en geconverteerd naar sleutelpaarwaarden waar key = naam van de student en value = ScoreDetail voorbeeld.

Vervolgens maken we een paar RDD zoals weergegeven in het onderstaande codefragment. Alleen voor experimenten heb ik een hash-partitie gemaakt van grootte 3, dus de drie partities bevatten respectievelijk 2, 2 en 4 sleutelwaardeparen. Dit wordt gemarkeerd in de sectie waar we elke partitie verkennen.

Nu kunnen we elke partitie verkennen. De eerste regel drukt de lengte van elke partitie af (aantal sleutelwaardeparen per partitie) en de tweede regel drukt de inhoud van elke partitie af.

En hier is de finale-beweging waarin we de gemiddelde score per leerling berekenen na het combineren van de scores over de partities.

De bovenstaande codestroom is als volgt ...
Eerst moeten we een combiner-functie maken die in wezen een tuple = (waarde, 1) is voor elke sleutel die in elke partitie wordt aangetroffen. Na deze fase is de uitvoer voor elke (sleutel, waarde) in een partitie (sleutel, (waarde, 1)).

Bij de volgende iteratie worden de combinerfuncties per partitie samengevoegd met behulp van de merge value-functie voor elke sleutel. Na deze fase is de uitvoer van elke (sleutel, (waarde, 1)) (sleutel, (totaal, aantal)) in elke partitie.

Ten slotte voegt de merge combiner-functie alle waarden samen over de partities in de executors en stuurt de gegevens terug naar de driver. Na deze fase is de output van elke (sleutel, (totaal, aantal)) per partitie
(key, (totalAcrossAllPartitions, countAcrossAllPartitions)).

De kaart converteert het
(key, tuple) = (key, (totalAcrossAllPartitions, countAcrossAllPartitions))
om het gemiddelde per sleutel te berekenen als (key, tuple._1 / tuple._2).

Op de laatste regel worden de gemiddelde scores van alle leerlingen aan het einde van de chauffeur afgedrukt.

Heeft u een vraag voor ons? Noem ze in het commentaargedeelte en we nemen contact met u op.

Gerelateerde berichten:

Partitionering in Spark ontrafelen