Filtrare i dati
Ora che hai un po' di dimestichezza con SQL, è più semplice parlare delle operazioni analoghe usando gli Spark DataFrame.
Vediamo il metodo .filter(). Come forse immagini, è l'equivalente in Spark della clausola WHERE di SQL. Il metodo .filter() accetta o un'espressione (come stringa) che seguirebbe la clausola WHERE in una query SQL, oppure una colonna Spark di valori booleani (True/False).
Per esempio, le due espressioni seguenti producono lo stesso risultato:
flights.filter("air_time > 120").show()
flights.filter(flights.air_time > 120).show()
Nota che nel primo caso passiamo una stringa a .filter(). In SQL, scriveremmo questo filtro come SELECT * FROM flights WHERE air_time > 120. Il .filter() di Spark può accettare qualsiasi espressione che potrebbe stare nella clausola WHERE di una query SQL (in questo caso, "air_time > 120"), purché venga passata come stringa.
Nota anche che in questo caso non facciamo riferimento al nome della tabella nella stringa — proprio come non lo faremmo nella richiesta SQL.
Nel secondo caso, passiamo invece una colonna di valori booleani a .filter(). Ricorda che flights.air_time > 120 restituisce una colonna booleana che contiene True per quei record in flights.air_time superiori a 120 e False altrimenti.
Ricorda: una SparkSession chiamata spark è già disponibile nel tuo workspace, insieme allo Spark DataFrame flights.
Questo esercizio fa parte del corso
Fondamenti di PySpark
Istruzioni dell'esercizio
- Usa il metodo
.filter()per trovare in due modi tutti i voli che hanno percorso più di 1000 miglia:- Per prima cosa, passa una stringa SQL a
.filter()che verifichi se la distanza è maggiore di 1000. Salva il risultato inlong_flights1. - Poi passa una colonna di valori booleani a
.filter()che controlli la stessa condizione. Salva il risultato inlong_flights2.
- Per prima cosa, passa una stringa SQL a
- Usa
.show()per stampare l’head di entrambi i DataFrame e assicurati che siano effettivamente uguali!
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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
____.____()
____.____()