Gegevens filteren
Nu je wat SQL-kennis op zak hebt, is het makkelijker om te praten over vergelijkbare bewerkingen met Spark DataFrames.
Laten we de .filter()-methode bekijken. Zoals je misschien vermoedt, is dit de Spark-tegenhanger van de WHERE-clausule in SQL. De .filter()-methode neemt ofwel een expressie (als string) die na de WHERE-clausule van een SQL-statement zou komen, of een Spark-kolom met booleaanse (True/False) waarden.
Bijvoorbeeld, de volgende twee expressies leveren dezelfde output op:
flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()
Let op dat we in het eerste geval een string doorgeven aan .filter(). In SQL zouden we deze filtertaak schrijven als SELECT * FROM flights WHERE air_time > 120. Spark’s .filter() kan elke expressie accepteren die in de WHERE-clausule van een SQL-query kan staan (in dit geval "air_time > 120"), zolang die als string wordt doorgegeven. Merk op dat we in dit geval in de string niet naar de naam van de tabel verwijzen — net zoals we dat in het SQL-statement ook niet zouden doen.
In het tweede geval geven we daadwerkelijk een kolom met booleaanse waarden door aan .filter(). Onthoud dat flights.air_time > 120 een kolom met booleaanse waarden teruggeeft, met True voor die records in flights.air_time die boven 120 liggen, en False voor de rest.
Vergeet niet: er staat al een SparkSession met de naam spark klaar in je werkruimte, samen met de Spark DataFrame flights.
Deze oefening maakt deel uit van de cursus
Basis van PySpark
Oefeninstructies
- Gebruik de
.filter()-methode om alle vluchten te vinden die meer dan 1000 mijl vlogen, op twee manieren:- Geef eerst een SQL-string door aan
.filter()die controleert of de afstand groter is dan 1000. Sla dit op alslong_flights1. - Geef daarna een kolom met booleaanse waarden door aan
.filter()die hetzelfde controleert. Sla dit op alslong_flights2.
- Geef eerst een SQL-string door aan
- Gebruik
.show()om de koppen van beide DataFrames te printen en controleer of ze echt gelijk zijn!
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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
____.____()
____.____()