Интересно, требуется ли загрузка всего набора данных в память из-за требований к столбчатому сжатию или существует более эффективный подход на основе потоков? В моем случае я буду получать записи в потоковом режиме. Для аналогичного процесса вывода в формате CSV мы записываем строки на диск партиями по 1000, поэтому количество строк, которые необходимо хранить в памяти, никогда не достигает размера полного набора данных.
Должен ли я ...?:
- Просто создайте фрейм данных pandas и затем запишите его в паркет. (Это означает, что весь набор данных должен храниться в памяти, но мы рассматриваем это как необходимое требование.)
- Используйте какой-нибудь удобный для потоковой передачи способ записи примерно 1000 строк за раз, как мы получаем их, сводя к минимуму общее потребление оперативной памяти на определенный момент времени в ходе процесса. (Я не видел документации о том, как это сделать, и не уверен, что это вообще возможно для паркета.)
- Запишите все в CSV, а затем используйте функцию, которая умно читает / анализирует содержимое CSV и создает сжатый паркет постфактум. (Возможно, более медленное время выполнения, но меньший профиль памяти и меньшая вероятность сбоя при работе с очень большим файлом.)
Предложения?
Подробнее здесь: https://stackoverflow.com/questions/647 ... ent-manner