Filtrování dat
Teď, když už máš trochu SQL znalostí za sebou, je snazší probrat analogické operace s použitím Spark DataFrames.
Podívejme se na metodu .filter(). Jak možná tušíš, je to Spark ekvivalent SQL klauzule WHERE. Metoda .filter() přijímá buď výraz, který by následoval za klauzulí WHERE v SQL dotazu (jako řetězec), nebo Spark sloupec hodnot boolean (True/False).
Například tyto dva výrazy vrátí stejný výsledek:
flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()
Všimni si, že v prvním případě předáváme metodě .filter() řetězec. V SQL bychom tento filtr zapsali jako SELECT * FROM flights WHERE air_time > 120. Metoda .filter() ve Sparku přijme jakýkoli výraz, který by mohl stát v klauzuli WHERE SQL dotazu (v tomto případě "air_time > 120"), pokud je předán jako řetězec.
Všimni si také, že v tomto případě název tabulky v řetězci neuvádíme – stejně jako bychom ho neuváděli v SQL dotazu.
Ve druhém případě předáváme metodě .filter() přímo sloupec hodnot boolean. Pamatuj, že flights.air_time > 120 vrátí sloupec hodnot boolean, kde záznamy v flights.air_time s hodnotou vyšší než 120 mají True a ostatní False.
V pracovním prostředí máš k dispozici SparkSession pojmenovanou spark a také Spark DataFrame flights.
Toto cvičení je součástí kurzu
Foundations of PySpark
Pokyny k cvičení
- Pomocí metody
.filter()najdi všechny lety, které uletěly více než 1000 mil – dvěma způsoby:- Nejprve předej metodě
.filter()SQL řetězec, který ověří, zda je vzdálenost větší než 1000. Výsledek ulož jakolong_flights1. - Poté předej metodě
.filter()sloupec hodnot boolean, který ověří totéž. Výsledek ulož jakolong_flights2.
- Nejprve předej metodě
- Pomocí
.show()vypiš první řádky obou DataFrames a ověř, že jsou skutečně shodné!
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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
____.____()
____.____()