Un tutorial pratico che utilizza PySpark per archiviare solo fino allo 0,01% delle righe di un DataFrame senza perdere alcuna informazione.
In un’era in cui aziende e organizzazioni raccolgono più dati che mai, i set di dati tendono ad accumulare milioni di righe non necessarie che non contengono informazioni nuove o preziose. In questo articolo ci concentreremo su un aspetto critico della gestione dei dati: eliminare le righe in un set di dati se non forniscono alcun valore aggiunto, utilizzando PySpark*.
*PySpark viene utilizzato rispetto ai panda quando si ha a che fare con set di dati molto grandi perché può elaborare i dati su più computer, rendendoli più veloci e scalabili. Panda funziona bene per set di dati più piccoli che possono stare nella memoria di una singola macchina, ma potrebbe diventare lento o addirittura poco pratico per i big data.
Immaginiamo la seguente situazione: lavori come ingegnere/scienziato dei dati nel reparto manutenzione di una società immobiliare. Negli ultimi dieci anni, la tua azienda ha caricato tutti i dati di manutenzione da un database esterno contenente le condizioni dei tuoi edifici e li ha archiviati nel cloud storage dell’azienda. I dati potrebbero ad esempio assomigliare a questo:
In questo set di dati sono presenti tre colonne:
id
-> per l’ID dell’edificio.condition
-> un numero intero compreso tra 1 (pessimo) e 10 (ottimo) che rappresenta lo stato dell’edificio.import_date
-> a appuntamento colonna che rappresenta il giorno in cui questa riga è stata importata dal software esterno.
Per creare tu stesso questo set di dati, esegui lo snippet seguente:
from pyspark.sql import SparkSession, Row
from pyspark.sql.functions as f
from pyspark.sql.types import IntegerType, DateType
import random# set the seed to get same results when rerunning
random.seed(42)
# create a spark session
spark = SparkSession.builder.getOrCreate()
# create id list
ids = list(range(1, 11)) # Adjust this list size to meet the desired number of unique IDs
# create two possible conditions for each id
conditions = ((random.randint(1, 10) for _ in range(2)) for _ in ids)
# create a list of tuples where each tuple is a row
rows = ((id, random.choice(conditions(id-1)), date)
for id in ids…
Fonte: towardsdatascience.com