Питон для инженеров по обработке данных

Питон для инженеров по обработке данных основы и практические применения

Продвинутые техники ETL для начинающих

Фото от Boitumelo на Unsplash

В этой статье я расскажу о продвинутых техниках инженерии данных на Python. Не сомневайтесь, Python – самый популярный язык программирования для работы с данными. За мою почти двенадцатилетнюю карьеру в области инженерии данных я столкнулся с различными ситуациями, когда у кода возникали проблемы. Эта статья – краткое резюме того, как я их решил и научился писать более качественный код. Я покажу несколько техник, которые делают наш ETL быстрее и помогают улучшить производительность кода.

Списковые включения

Представьте, что вы перебираете список таблиц. Обычно мы делаем это так:

data_pipelines = ['p1','p2','p3']processed_tables = []for table in data_pipelines:    processed_tables.append(table)

Однако вместо этого мы можем использовать списковые включения. Они не только быстрее, но и сокращают код, делая его более лаконичным:

processed_tables = [table for table in data_pipelines]

Например, перебор большого файла с данными для преобразования (ETL) каждой строки теперь намного проще:

def etl(item):    # Здесь выполняем преобразование данных    return json.dumps(item)data = u"\n".join(etl(item) for item in json_data)

Списковые включения чрезвычайно полезны для обработки ETL больших файлов данных. Попробуйте запустить этот пример в вашей среде Python:

import ioimport jsondef etl(item):    return json.dumps(item)# Файл текста загружен как блоб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())# Этот файл данных готов для BigQuery в формате Newline delimited JSONprint(data_file)

Результатом будет файл данных в формате Newline delimited JSON. Это стандартный формат для данных в хранилище данных BigQuery и он готов к загрузке в таблицу:

{"id": "1", "first_name": "John"}{"id": "2", "first_name": "Mary"}<_io.BytesIO object at 0x10c732430>

Генераторы