Filtrera data
Nu när du har lite SQL-kunskaper i bagaget är det lättare att prata om motsvarande operationer med Spark DataFrames.
Låt oss titta på metoden .filter(). Som du kanske anar är detta Sparks motsvarighet till SQL:s WHERE-sats. Metoden .filter() tar antingen ett uttryck som skulle följa WHERE-satsen i en SQL-fråga – angivet som en sträng – eller en Spark-kolumn med booleska värden (True/False).
De två följande uttrycken ger till exempel samma resultat:
flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()
Lägg märke till att vi i det första fallet skickar en sträng till .filter(). I SQL skulle vi skriva den här filtreringen som SELECT * FROM flights WHERE air_time > 120. Sparks .filter() accepterar vilket uttryck som helst som skulle kunna stå i WHERE-satsen i en SQL-fråga (i det här fallet "air_time > 120"), så länge det skickas som en sträng.
Observera att vi i det här fallet inte refererar till tabellnamnet i strängen – precis som vi inte skulle göra i SQL-frågan.
I det andra fallet skickar vi i stället en kolumn med booleska värden till .filter(). Kom ihåg att flights.air_time > 120 returnerar en kolumn med booleska värden där posterna i flights.air_time som är över 120 får värdet True, och övriga får False.
Kom ihåg att en SparkSession med namnet spark redan finns i din arbetsyta, tillsammans med Spark DataFrame:n flights.
Den här övningen är en del av kursen
Grunderna i PySpark
Övningsinstruktioner
- Använd metoden
.filter()för att hitta alla flygningar som flög över 1 000 miles på två sätt:- Skicka först en SQL-sträng till
.filter()som kontrollerar om distansen är större än 1 000. Spara resultatet somlong_flights1. - Skicka sedan en kolumn med booleska värden till
.filter()som kontrollerar samma sak. Spara resultatet somlong_flights2.
- Skicka först en SQL-sträng till
- Använd
.show()för att skriva ut de första raderna i båda DataFrames och kontrollera att de verkligen är lika!
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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
____.____()
____.____()