Apache-Spark-Lab: DataFrames und Spark SQL an einer CSV-Datei lernen, mit der Spark UI
In diesem Lab erhält jede lernende Person ein kleines eigenes Apache Spark, in dem eine CSV-Datei mit 24 Bestellungen bereits als DataFrame geladen ist. Spark ist ein Werkzeug, um Tabellen von Daten zu bearbeiten, indem es die Arbeit in Jobs aufteilt. Die Lernenden stellen ihm Fragen auf zwei Arten, mit DataFrame-Code und mit SQL, und öffnen dann die Spark UI, um zu sehen, was es getan hat.
Es ist kein Angriffs-Lab. Keine Kopie hat eine Verbindung ins Internet oder zu anderen Lernenden, es kann also nichts hineingeladen werden, und nichts darin kann jemand anderen erreichen.
Was die Lernenden lernen
Wie ein DataFrame eine Tabelle ist, die Spark aus einer Datei liest: seine Spalten und die Typen, die Spark selbst ermittelt, dann filter, um einige Zeilen zu behalten, groupBy und count, um sie zusammenzufassen, und dieselbe Art von Frage in SQL an eine Tabelle gleichen Namens. Die Lernenden sehen, dass beide Wege denselben Plan erzeugen und dass jede Abfrage, die die Daten lesen muss, zu einem Job wird, den sie in der Spark UI finden, auf dem Tab Jobs und dem Tab SQL / DataFrame. Das Lab passt zu Einführungen in Data Engineering, Big Data und Datenbanken; prüfen Sie die Einheit Ihrer eigenen Prüfungsorganisation für den genauen Wortlaut, hier wird keiner zitiert.
Im Browser ausführen
Das Lab startet einen einzigen Dienst, spark, und wartet, bis er die Datei geladen hat, was etwa sechs Sekunden dauert. Es ist Spark im lokalen Modus: ein Prozess, der den Driver und seine Worker-Threads enthält, was in den Arbeitsspeicher einer Kopie passt. Es gibt keinen Master und keinen Worker, die gestartet und gestoppt werden müssten. Das Terminal hat kein eigenes Spark, daher antwortet der Dienst zusätzlich auf Port 8000: curl sendet eine SQL-Abfrage an /sql oder einen DataFrame-Ausdruck an /df und gibt das Ergebnis als Tabelle aus.
- Container-Seite öffnen. Öffnen Sie in der Leiste „Entwickeln“ und wählen Sie „Einen Container ausführen“. Die Seite kann jeder öffnen, und das Git-Lab und das SQL-Lab starten ohne Konto. Alle anderen Labs brauchen ein kostenloses Konto: Erstellen Sie eines, melden Sie sich an und klicken Sie dann auf „Starten“.
- Lab suchen. Die Karte „Beispiel-Labs“ listet alle Beispiele auf. Suchen Sie Apache Spark: DataFrames and SQL.
- Auf „Starten“ klicken. „Starten“ führt das Lab unverändert mit einem einzigen Klick aus. „Zuerst die Datei bearbeiten“ öffnet die Compose-Datei, damit Sie sie vor dem Start ändern können.
- Öffnen. Auf der Seite des Labs hat die Lab-Leiste einen Link namens Spark UI: Klicken Sie darauf, um die Spark UI im Browser mit ihren Tabs Jobs, Stages und SQL / DataFrame zu sehen. Klicken Sie dann auf „Terminal öffnen“ und geben Sie curl -s -d 'SELECT * FROM orders LIMIT 5' http://spark:8000/sql ein, um die ersten fünf Bestellungen zu sehen. orders.count(), an /df gesendet, antwortet 24.
Was Lernende abgeben sollen
Das Ergebnis einer selbst geschriebenen Abfrage über die Datei, etwa der Gesamtumsatz je Land (quantity mal unit_price, größter Wert zuerst, womit Japan mit 717,5 oben steht), die ausgegebene Tabelle und ein Screenshot dieser Abfrage in der Spark UI. Dazu ein bis zwei Sätze in eigenen Worten, was Spark getan hat. Nichts wird automatisch bewertet: Der Satz zeigt, ob es verstanden wurde. Für anspruchsvollere Arbeiten verlangen Sie dieselbe Antwort sowohl als DataFrame-Code als auch als SQL.
Eine Basics-Lektion zu diesem Lab
Spark Basics ist eine kleine Lektion, die in diesem Lab durchgearbeitet wird. Darin sehen sich Lernende die ersten Zeilen an, filtern die Bestellungen aus dem Vereinigten Königreich, gruppieren und zählen die Bestellungen nach Land, fragen den Umsatz jedes Landes in SQL ab und finden diese Abfragen anschließend in der Spark UI.
Kostenlose persönliche Konten bekommen die Lektion im Modul Basics auf der Startseite, jede Einrichtung kann sie aus dem Basics-Ordner der Bibliothek kopieren, und eine neue Einrichtung beginnt mit ihr in einem Modul namens Lab Basics (Sample). Sie ist absichtlich klein: Sie zeigt Lehrkräften, was eine in einem Lab durchgearbeitete Lektion ist, und das Lab erledigt den Rest. Kopieren Sie sie in ein eigenes Modul, um sie zu ändern.
Der Code auf GitHub
Die Compose-Datei hat kein Dockerfile: Sie führt ein einziges öffentliches Standard-Image aus, das des Apache-Spark-Projekts selbst, auf eine Version festgelegt, als Benutzer ohne Sonderrechte mit 512 MB Arbeitsspeicher. Apache Spark steht unter der Lizenz Apache-2.0 und wird nicht von uns verteilt. Die Datei schreibt beim Start außerdem die CSV-Datei und den kleinen Abfragedienst, es gibt also nichts zu bauen. Die Grenzen sind ehrlich benannt: Es ist ein einzelnes Spark und kein Cluster, die Daten bestehen aus 24 Zeilen, Laufzeiten sagen also nichts über echte Lasten aus, eine Abfrage, die weit mehr Arbeitsspeicher braucht, als die Kopie hat, schlägt fehl, und das Lab hat keinen Weg ins Internet. Nichts bleibt erhalten, wenn das Lab stoppt.
Als Aufgabe stellen
Schreiben Sie in die Aufgabe, was abzugeben ist.
- Lab erstellen. Fügen Sie in Ihrem Modul eine Aufgabe hinzu und wählen Sie die Karte „Container-Lab“, dann „In einem GitHub-Repository“. Geben Sie https://github.com/mitsurutech/lab-spark mit dem Branch main an. Die Compose-Datei ist standardmäßig compose.yaml. Forken Sie das Repository zuerst, wenn Sie es ändern möchten, zum Beispiel um Ihre eigene CSV-Datei zu verwenden.
- Veröffentlichen und ausprobieren. „Veröffentlichen“ legt den Commit fest, den Sie gesehen haben. Eine spätere Änderung im Repository verändert also kein Lab, das Sie bereits gestellt haben. Starten Sie zuerst Ihre eigene Kopie.
- Zuweisen. Weisen Sie es wie jede Aufgabe zu, auf Wunsch mit Fälligkeitsdatum, und schreiben Sie in die Aufgabe, was zu tun ist und was abgegeben werden soll.
- Abgaben bewerten. Öffnen Sie die Kopie einer lernenden Person und die abgegebene Arbeit, bewerten Sie sie und geben Sie sie mit einer Begründung zur Überarbeitung zurück, wenn mehr nötig ist.
Häufige Fragen
- Ist das ein Spark-Cluster?
- Nein. Es ist Spark im lokalen Modus, ein Prozess, der die Arbeit eines Masters und seiner Worker erledigt, weil der Dienst einer Kopie 512 MB hat und ein Worker allein mehr braucht. Das Lab vermittelt die DataFrame- und SQL-Seite, nicht, wie Arbeit auf mehrere Maschinen verteilt wird.
- Warum verwendet das Terminal curl und nicht pyspark oder spark-sql?
- Das Terminal des Labs enthält curl, psql und einige andere Clients, aber kein Spark und kein Java. Der Spark-Dienst beantwortet eine per HTTP gesendete Abfrage und gibt das Ergebnis aus, daher genügt curl. Auf Ihrem eigenen Rechner können Sie mit den gleichen Ideen pyspark verwenden.
- Können Lernende eigene Daten verwenden?
- Nicht innerhalb einer Kopie, die keinen Weg für Dateien hinein hat. Forken Sie das Repository, tragen Sie Ihre eigenen Zeilen in die CSV-Datei in compose.yaml ein und legen Sie den Fork als Lab fest.