Создание файлов Parquet из потока в Python с эффективным использованием памяти. ⇐ Python

Программы на Python
Anonymous
Создание файлов Parquet из потока в Python с эффективным использованием памяти.

Сообщение Anonymous »

Похоже, что наиболее распространенный способ создания файлов Parquet в Python — это сначала создать фрейм данных Pandas, а затем использовать pyarrow для записи таблицы в паркет. Я беспокоюсь, что это может привести к чрезмерному использованию памяти, поскольку для создания кадра данных pandas требуется по крайней мере одна полная копия набора данных, хранящаяся в памяти.
Интересно, требуется ли загрузка всего набора данных в память из-за требований к столбчатому сжатию или существует более эффективный подход на основе потоков? В моем случае я буду получать записи в потоковом режиме. Для аналогичного процесса вывода в формате CSV мы записываем строки на диск партиями по 1000, поэтому количество строк, которые необходимо хранить в памяти, никогда не достигает размера полного набора данных.
Должен ли я ...?:
  • Просто создайте фрейм данных pandas и затем запишите его в паркет. (Это означает, что весь набор данных должен храниться в памяти, но мы рассматриваем это как необходимое требование.)
  • Используйте какой-нибудь удобный для потоковой передачи способ записи примерно 1000 строк за раз, как мы получаем их, сводя к минимуму общее потребление оперативной памяти на определенный момент времени в ходе процесса. (Я не видел документации о том, как это сделать, и не уверен, что это вообще возможно для паркета.)
  • Запишите все в CSV, а затем используйте функцию, которая умно читает / анализирует содержимое CSV и создает сжатый паркет постфактум. (Возможно, более медленное время выполнения, но меньший профиль памяти и меньшая вероятность сбоя при работе с очень большим файлом.)
Мысли?
Предложения?

Подробнее здесь: https://stackoverflow.com/questions/647 ... ent-manner

Вернуться в «Python»