Ответ вслух Middle Чтение и запись данных спрашивают часто обновлено

Как прочитать большой файл в pandas

Вопрос

Вам дали CSV на 40 ГБ, а на ноутбуке 16 ГБ памяти. Как посчитаете нужные метрики?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала читаю nrows=5000, смотрю колонки, типы и разделитель. Дальше режу объём: usecols только нужных колонок и экономные типы, строки с повторами в category, числа в int32 или float32, это часто уменьшает объём в разы.

Что должно прозвучать в ответе

  • Сначала посмотреть заголовок и пару тысяч строк: `nrows`

  • `usecols` и экономные `dtype` (`category`, `int32`, `float32`)

  • `chunksize` для складываемых агрегатов

  • Медиана и уникальные по кускам не складываются: нужны другие подходы

  • Конвертировать в Parquet один раз

  • DuckDB или Polars для запросов прямо по файлу

Что могут спросить следом

  • Как посчитать число уникальных пользователей по кускам?
  • Чем DuckDB тут лучше pandas?
  • Когда пора в Spark?

Разбор

Сначала читаю nrows=5000, смотрю колонки, типы и разделитель. Дальше режу объём: usecols только нужных колонок и экономные типы, строки с повторами в category, числа в int32 или float32, это часто уменьшает объём в разы. Если метрика складывается, сумма, количество, минимум, читаю chunksize и объединяю частичные результаты. С медианой и уникальными так не выйдет: уникальных можно собрать в множество, если их немного, а медиану считать приближённо или другим инструментом. Практичный путь: один раз перегнать файл в Parquet, а запросы писать в DuckDB или Polars, они читают файл потоково и параллельно. Если данных сотни гигабайт и это регулярная задача, это уже работа для хранилища или Spark.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме