IniziaInizia gratis

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

Visualizza il corso

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 in long_flights1.
    • Poi passa una colonna di valori booleani a .filter() che controlli la stessa condizione. Salva il risultato in long_flights2.
  • 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
____.____()
____.____()
Modifica ed esegui il codice