Creare colonne
In questo capitolo imparerai a usare i metodi definiti dalla classe DataFrame di Spark per eseguire comuni operazioni sui dati.
Vediamo come effettuare operazioni per colonna. In Spark puoi farlo usando il metodo .withColumn(), che accetta due argomenti. Per primo, una stringa con il nome della nuova colonna e, per secondo, la nuova colonna stessa.
La nuova colonna deve essere un oggetto di classe Column. Crearne uno è semplice quanto estrarre una colonna dal tuo DataFrame usando df.colName.
Aggiornare un DataFrame di Spark è un po' diverso rispetto a lavorare con pandas perché il DataFrame di Spark è immutabile. Questo significa che non può essere modificato e quindi le colonne non possono essere aggiornate in place.
Di conseguenza, tutti questi metodi restituiscono un nuovo DataFrame. Per sovrascrivere il DataFrame originale devi riassegnare il DataFrame restituito usando il metodo, così:
df = df.withColumn("newCol", df.oldCol + 1)
Il codice sopra crea un DataFrame con le stesse colonne di df più una nuova colonna, newCol, in cui ogni valore è uguale al corrispondente valore di oldCol, più uno.
Per sovrascrivere una colonna esistente, passa semplicemente il nome della colonna come primo argomento!
Ricorda: una SparkSession chiamata spark è già disponibile nel tuo workspace.
Questo esercizio fa parte del corso
Fondamenti di PySpark
Istruzioni dell'esercizio
- Usa il metodo
spark.table()con l'argomento"flights"per creare un DataFrame contenente i valori della tabellaflightsnel.catalog. Salvalo comeflights. - Mostra l'intestazione di
flightsusandoflights.show(). Controlla l'output: la colonnaair_timecontiene la durata del volo in minuti. - Aggiorna
flightsper includere una nuova colonna chiamataduration_hrs, che contiene la durata di ciascun volo in ore (dovrai dividereair_timeper il numero di minuti in un'ora).
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Create the DataFrame flights
flights = spark.table(____)
# Show the head
____.____()
# Add duration_hrs
flights = flights.withColumn(____)