
In questa storia parlerò di tecniche avanzate di ingegneria dei dati in Python. Senza dubbio, Python è il linguaggio di programmazione per i dati più popolare. Durante i miei quasi dodici anni di carriera nell’ingegneria dei dati, ho riscontrato varie situazioni in cui il codice presentava problemi. Questa storia è un breve riassunto di come li ho risolti e ho imparato a scrivere codice migliore. Mostrerò alcune tecniche che rendono il nostro ETL più veloce e aiutano a migliorare le prestazioni del nostro codice.
Elenca le comprensioni
Immagina di scorrere un elenco di tabelle. In genere, faremmo questo:
data_pipelines = ('p1','p2','p3')
processed_tables = ()
for table in data_pipelines:
processed_tables.append(table)
Ma invece potremmo usare la comprensione delle liste. Non solo sono più veloci, ma riducono anche il codice rendendolo più conciso:
processed_tables = (table for table in data_pipelines)
Ad esempio, eseguire il looping di un file di grandi dimensioni con dati da trasformare (ETL) per ogni riga non è mai stato così semplice:
def etl(item):
# Do some data transformation here
return json.dumps(item)data = u"\n".join(etl(item) for item in json_data)
Le comprensioni degli elenchi sono estremamente utili per l’elaborazione ETL di file di dati di grandi dimensioni. Immagina un file di dati che dobbiamo trasformare in un formato delimitato da nuova riga. Prova a eseguire questo esempio nel tuo ambiente Python:
import io
import jsondef etl(item):
return json.dumps(item)
# Text file loaded as a blob
blob = """
(
{"id":"1","first_name":"John"},
{"id":"2","first_name":"Mary"}
)
"""
json_data = json.loads(blob)
data_str = u"\n".join(etl(item) for item in json_data)
print(data_str)
data_file = io.BytesIO(data_str.encode())
# This data file is ready for BigQuery as Newline delimited JSON
print(data_file)
L’output sarà a JSON delimitato da nuova riga. Questo è un formato standard per i dati nel data warehouse BigQuery ed è pronto per essere caricato nella tabella:
{"id": "1", "first_name": "John"}
{"id": "2", "first_name": "Mary"}
<_io.BytesIO object at 0x10c732430>
Generatori
Fonte: towardsdatascience.com