Mann, Apache Spark ist ein echtes Kraftpaket! Wenn man dann noch eine ausgefallene und unterhaltsame Sprache namens Scala hinzufügt, hat man das Gefühl, dass man eine ganze Menge cooler Dinge mit einer großen Flexibilität tun kann! Das ist mein aktueller Standpunkt zu diesem Thema nach einem kurzen Jahr der Arbeit mit dieser Einrichtung. Der erste Monat war eine ganz andere Geschichte. Ich möchte Ihnen einige Tipps geben, die mir wirklich geholfen haben, als ich mit der Arbeit an einer bestehenden Scala-Spark-Codebasis begann.
Die Codebasis
Scala ist eine wirklich leistungsstarke Sprache mit vielen netten Funktionen. Es macht Spaß, sie zu schreiben, und sie ist im Vergleich zu anderen Sprachen, die einige Boilerplate erfordern (wie Java), recht ausdrucksstark. Das KANN die Lesbarkeit des Codes verbessern, aber manche Leute neigen dazu, kurze, obskure Einzeiler zu schreiben. Es ist eine Verschwendung, Zeit in die Entschlüsselung dieser Art von Code zu investieren, solange Sie es nicht müssen. Kurz gesagt: Wir wollen nicht zu viel Zeit damit verbringen, übermäßig kompliziertem Code auf den Grund zu gehen. Es kann hilfreicher sein, die Unit-Tests global zu lesen, um ein Gefühl dafür zu bekommen, was der Code tun soll (vorausgesetzt, sie sind auf dem neuesten Stand und folgen einer Unit-Test-Namenskonvention, die die Erklärung der Funktionalität erzwingt). Noch ein Hinweis zum Code: Kümmern Sie sich nicht um die kleinen Dinge. In Scala-Spark gibt es viele Möglichkeiten, die gleiche Sache zu erreichen. Es gibt zum Beispiel mehr als eine Möglichkeit, eine Spalte anhand eines Namens auszudrücken:// Auswählen der Spalte namens col1
val col = col("col1")
val col = $"col1"
val col = `col1
val col = Datensatz("col1")
Nach einer Weile werden Sie sich an die vielen Synonyme gewöhnen, die Spark bietet. Hoffentlich enthält Ihr Code nicht zu viele verschiedene Synonyme!
Die Daten
Wenn Sie an einem Projekt mit Scala-Spark arbeiten, sind immer Daten im Spiel. Die Struktur dieser Daten kennenzulernen, ist von größter Bedeutung. Selbst wenn Sie noch nie Scala-Spark-Code geschrieben haben, ist die beste Möglichkeit, Einblicke in die Daten zu erhalten, die Verwendung von Notebooks. Notebooks können bei Apache Spark-Anbietern wie Databricks verwendet werden. Solange Sie wissen, wie Sie die Daten einlesen können, sind Sie startklar! Spielen Sie mit den Daten herum. Versuchen Sie, sich einige Metriken auszudenken und versuchen Sie, diese Metriken aus den Daten zu extrahieren. Schauen Sie sich insbesondere an:- Joins (zusätzlich zu den klassischen JoinTypes gibt es in Spark viele praktische JoinTypes, wie z.B. einen meiner Favoriten, den left_anti join. Equi join kann auch eine praktische Möglichkeit sein, Datensätze zu verbinden)
- SQL-Funktionen (insbesondere bei der Fensterung von Daten)
Debuggen Ihres Codes
Wenn Sie an dem Punkt angelangt sind, an dem Sie zur Codebasis beitragen werden und beim Unit-Testing nicht weiterkommen (weil Sie von Ihrem Haltepunkt aus nicht sehen können, was sich in Ihrem Datenrahmen befindet), beachten Sie, dass Spark nur auswertet, wenn eine Aktion ausgeführt wird. Wenn Sie Code haben, der viele Transformationen durchläuft und Sie wissen möchten, wie die Daten in der Mitte aussehen, können Sie den gesamten Code bis zur letzten Transformation, die Sie interessiert, auswerten und einfach die Funktion collect() aufrufen. Dies setzt Ihre Spark-Instanz in Gang und gibt Ihnen alle transformierten Daten in einem Seq[T] zurück. Betrachten Sie den folgenden Code:
case class Person(
name: Zeichenkette,
Geburtsdatum: Datum,
Land: String,
E-Mail: String,
hideEmail: Boolean
) erweitert Product
case class ContactInfo(email: Option[String], name: String) extends Product
def someTransform(input: Dataset[Person])(implicit spark: SparkSession): Dataset[ContactInfo] = {
import spark.implicits._
input.filter($"Alter" > 5)
.filter($"name" =!= "John")
.filter($"Land" === "DE")
...// eine Menge anderer Transformationen
.map(person => {
val email = if (person.hideEmail) None else Some(person.email)
ContactInfo(email = email, name = person.name)
})
}
Wenn wir den dritten Filter (.filter($"country" === "DE")) verdächtigen würden, kann an beliebiger Stelle in der Methode ein Haltepunkt hinzugefügt werden (da wir nur am Eingabewert interessiert sind). Sobald der Haltepunkt ausgelöst wird, können wir den Ausdruck auswerten:
input.filter($"Alter" > 5).filter($"name" =!= "John").collect()Dies wendet die ersten 2 Transformationen an und gibt alle Zeilen zurück, die als Seq[Person] passen.
Operative Unterstützung
Wenn das Projekt, an dem Sie arbeiten, bereits in Produktion ist, werden Fragen zum Scala-Spark-Code gestellt werden. Wenn Sie den Vorteil haben, dass andere Personen in Ihrem Projekt damit beginnen, das System zu analysieren, um die Frage zu beantworten, dann tun Sie sich zusammen! Lassen Sie den Guru die Frage nicht alleine beantworten, sondern fragen Sie ihn, wie die Antwort zustande gekommen ist. Natürlich ist das offensichtlich. Aber ich habe oft erlebt, dass neuere Kollegen zu schüchtern sind, um zu fragen (oder natürlich nicht interessiert sind). Hoffentlich helfen Ihnen diese Tipps, wenn Sie anfangen, zu einem Scala-Spark-Projekt beizutragen! Danke fürs Lesen!Unsere Ideen
Weitere Blogs
Contact
Let’s discuss how we can support your journey.



