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 yetflatMap
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 übertragencount— Anzahl der Elementefirst/take(n)— Beispielzeilen auswählenreduce— zu einem Wert zusammenfassen
val total = sc.parallelize(1 to 100).reduce(_ + _)
println(total) // 5050 — runs nowSchmal 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)
cachezur 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
- RDDs und DataFrames
- Transformationen und Actions
- Spark SQL
- Aggregationen