0Pricing
Scala for Backend Engineering & Functional Programming · Lektion

Transformationen und Actions

Faule Berechnung

Transformationen und Actions ist eine kostenlose Scala for Backend Engineering & Functional Programming-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Scala for Backend Engineering & Functional Programming-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Scala for Backend Engineering & Functional Programming-Kurs umfasst insgesamt 4 Lektionen.

Zwei Arten von Operationen

Spark-Operationen werden in Transformationen (erstellen ein neues Dataset und sind verzögert) und Aktionen (lösen die Berechnung aus und geben ein Ergebnis zurück oder schreiben eine Ausgabe) unterteilt.

Verzögerte Auswertung

Transformationen sind verzögert: Sie zeichnen auf, was zu tun ist, führen aber noch nichts aus. Spark erstellt einen gerichteten azyklischen Graphen (DAG) der Transformationen und führt ihn erst aus, wenn eine Aktion aufgerufen wird.

map und filter

map transformiert jedes Element; filter behält Elemente, die ein Prädikat erfüllen. Beide geben neue RDDs/Datasets zurück und werden noch nicht ausgeführt.

val nums  = sc.parallelize(1 to 10)
val evens = nums.filter(_ % 2 == 0).map(_ * 10)
// nothing computed yet

flatMap

flatMap bildet jedes Element auf null oder mehr Ausgaben ab und flacht diese ab – typisch etwa zum Aufteilen von Zeilen in Wörter.

val lines = sc.parallelize(Seq("hello world", "spark rocks"))
val words = lines.flatMap(_.split(" "))

Häufige Aktionen

Aktionen lösen die Ausführung aus:

  • collect — alle Ergebnisse zum Treiber übertragen
  • count — Anzahl der Elemente
  • first / take(n) — Beispielzeilen auswählen
  • reduce — zu einem Wert zusammenfassen
val total = sc.parallelize(1 to 100).reduce(_ + _)
println(total) // 5050 — runs now

Schmal vs. breit

Schmale Transformationen (map, filter) benötigen keine Datenübertragung. Breite Transformationen (groupByKey, reduceByKey, join) lösen einen Shuffle über das Netzwerk aus.

reduceByKey

Bei Schlüssel-Wert-RDDs aggregiert reduceByKey die Werte pro Schlüssel. Die Werte werden lokal kombiniert, bevor ein Shuffle stattfindet, wodurch dieser Vorgang effizienter als groupByKey ist.

val pairs  = sc.parallelize(Seq(("a", 1), ("b", 1), ("a", 1)))
val counts = pairs.reduceByKey(_ + _)
// (a, 2), (b, 1)

Caching

Wenn ein Dataset in mehreren Aktionen wiederverwendet wird, hält cache oder persist es im Speicher, sodass es nicht jedes Mal neu berechnet wird.

val cached = sc.parallelize(1 to 1000).filter(_ % 3 == 0).cache()
println(cached.count())
println(cached.sum())

DataFrame-Transformationen

DataFrames verfügen über eigene verzögerte Transformationen: select, where, withColumn, orderBy. Aktionen wie show und collect lösen sie aus.

import org.apache.spark.sql.functions._

val adults = df.where(col("age") >= 18)
               .withColumn("adult", lit(true))
adults.show()

Der klassische Word Count

Der kanonische Spark-Job: Zeilen aufteilen, jedes Wort auf eins abbilden und nach Schlüssel reduzieren. Erst das abschließende collect führt die Pipeline aus.

val text   = sc.textFile("book.txt")
val counts = text.flatMap(_.split(" "))
                 .map(w => (w, 1))
                 .reduceByKey(_ + _)
counts.collect().foreach(println)

Einfaches Scala-Pendant zu Lazy Evaluation

Ein eigenständiges Scala-Pendant: Eine verzögerte Sicht verschiebt die Arbeit, bis sie ausgewertet wird, und bildet damit die Trennung zwischen Transformationen und Aktionen in Spark nach.

object Main {
  def main(args: Array[String]): Unit = {
    val pipeline = (1 to 10).view.filter(_ % 2 == 0).map(_ * 10) // lazy
    val result = pipeline.toList // forces evaluation (action)
    println(result)
  }
}

Schnelltest

Wann führt Spark eine Kette aus map- und filter-Transformationen tatsächlich aus?

Zusammenfassung

Sie haben das Ausführungsmodell von Spark kennengelernt:

  • Transformationen werden verzögert ausgeführt (map, filter, flatMap, reduceByKey)
  • Aktionen lösen die Verarbeitung aus (collect, count, reduce)
  • schmale und breite Operationen (Shuffle)
  • cache zur Wiederverwendung von Ergebnissen

Als Nächstes: Spark SQL.

Häufig gestellte Fragen

Ist die Lektion „Transformationen und Actions“ kostenlos?

Ja — der vollständige Text von „Transformationen und Actions“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Scala for Backend Engineering & Functional Programming-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Scala for Backend Engineering & Functional Programming-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Transformationen und Actions“?

Faule Berechnung Du übst Scala for Backend Engineering & Functional Programming mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Scala for Backend Engineering & Functional Programming zu starten?

Keine Vorkenntnisse erforderlich. Scala for Backend Engineering & Functional Programming auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Transformationen und Actions“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Scala for Backend Engineering & Functional Programming-Lektion Code schreiben und ausführen?

Ja. Jede Scala for Backend Engineering & Functional Programming-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. RDDs und DataFrames
  2. Transformationen und Actions
  3. Spark SQL
  4. Aggregationen
← Zurück zu Scala for Backend Engineering & Functional Programming