Daten filtern
Jetzt, wo du ein bisschen SQL-Know-how hast, ist es einfacher, über die analogen Operationen mit Spark DataFrames zu sprechen.
Werfen wir einen Blick auf die Methode .filter()
. Wie du vielleicht schon vermutet hast, ist dies das Spark-Gegenstück zu SQLs WHERE
-Klausel. Die Methode .filter()
nimmt entweder einen Ausdruck, der der WHERE
-Klausel eines SQL-Ausdrucks als String folgen würde, oder eine Spark-Spalte mit booleschen (True
/False
) Werten entgegen.
Zum Beispiel liefern die folgenden zwei Ausdrücke die gleiche Ausgabe:
flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()
Beachte, dass wir im ersten Fall einen String an .filter()
übergeben. In SQL würden wir diese Filteraufgabe als SELECT * FROM flights WHERE air_time > 120
schreiben. Sparks .filter()
kann jeden Ausdruck akzeptieren, der in die WHERE
-Klausel einer SQL-Abfrage (in diesem Fall "air_time > 120"
) passen könnte, solange er als String übergeben wird.
Beachte, dass wir in diesem Fall nicht den Namen der Tabelle im String referenzieren – wie wir dies auch in der SQL-Anfrage nicht tun würden.
Im zweiten Fall übergeben wir tatsächlich eine Spalte mit booleschen Werten an .filter()
. Erinnere dich daran, dass flights.air_time > 120
eine Spalte mit booleschen Werten zurückgibt, die True
anstelle der Datensätze in flights.air_time
enthält, die über 120 sind, und ansonsten False
.
Erinnere dich daran, dass SparkSession
mit dem Namen spark
bereits in deinem Arbeitsbereich liegt, zusammen mit dem Spark DataFrame flights
.
Diese Übung ist Teil des Kurses
Einführung in PySpark
Anleitung zur Übung
Verwende die Methode
.filter()
, um alle Flüge zu finden, die mehr als 1000 Meilen in beide Richtungen geflogen sind:Zuerst übergibst du einen SQL-String an
.filter()
, der prüft, ob die Entfernung größer als 1000 ist. Speichere dies alslong_flights1
.Dann übergibst du eine Spalte mit booleschen Werten an
.filter()
, die das Gleiche überprüft. Speichere dies alslong_flights2
.
Verwende
.show()
, um die Köpfe der beiden DataFrames auszugeben und sicherzustellen, dass sie tatsächlich gleich sind!
Interaktive Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# Filter flights by passing a string
long_flights1 = ____.____("____ > ____")
# Filter flights by passing a column of boolean values
long_flights2 = ____.____(____.____ > ____)
# Print the data to check they're equal
____.____()
____.____()