Обработка больших CSV-файлов в Python
У меня есть большие файлы CSV, содержащие более 315 миллионов строк и один столбец. Мне нужно обработать более 50 таких файлов одновременно, чтобы получить результаты.
Поскольку я читаю более 10 с помощью csv-ридера, это занимает более 12 ГБ ОЗУ и мучительно медленно. Я могу прочитать только часть файла, чтобы сэкономить память, но потратил бы больше времени на чтение файла, поскольку он будет читать весь файл каждый раз.
Я думал о загрузке их в базу данных и запросе данных оттуда. Однако я не уверен, поможет ли этот подход каким-либо образом. Может кто-нибудь сказать, какой самый эффективный способ обработки таких сценариев в Python?
2 ответа
Вы найдете решение здесь Ленивый метод для чтения больших файлов в Python?
Кроме того, если у вас более длинный конвейер обработки, вы можете ознакомиться с разделом 4.13. Создание конвейеров обработки данных в книге, Python Cookbook, 3-е издание Бизли и Джонса.
Проверьте ETLyte, инструмент, который я только что открыл. Это.NET, но вы можете обратиться к EXE из Python. Это все еще в стадии разработки, но я думаю, что это сработает для вашей ситуации.
С ETLyte, здесь были бы шаги:
- Поместите файлы в
Flatfiles
папку или любую папку, указанную вconfig.json
, - Опишите их с помощью схемы JSON и поместите их в
Schemas
папку, или что вы укажете (Примечание: если все они имеют одинаковую схему [вы сказали, что это все один столбец), то просто изменитеflatfile
поле в схеме для регулярного выражения, соответствующего вашим файлам) - Когда дело доходит до выполнения сложения / умножения, вы можете создать производные столбцы, которые выполняют это вычисление.
- Бежать
ETLyteExe.exe
и позволить данным поступать в
ETLyte только начинается, но у него много возможностей и много чего еще. Он также поставляется с интерактивным REPL с завершением слов, который оборачивает SQLite DLL, чтобы вы могли запрашивать данные без установки sqlite3. Для обзора инструмента, посмотрите здесь.