Панды: эффективно писать тысячи маленьких файлов - PullRequest
0 голосов
/ 08 мая 2018

вот моя проблема.

У меня есть один большой CSV-файл, содержащий чуть более 100 миллионов строк, которые мне нужно разделить на гораздо более мелкие файлы (при необходимости я могу добавить больше деталей). В настоящий момент я читаю большой CSV-блок, выполняю некоторые вычисления, чтобы определить, как разделить блок, и, наконец, записываю (добавляю) файлы с

df.to_csv(outfile, float_format='%.8f', index=False, mode='a', header=header)

(переменная header равна True, если я пишу в 'outfile' впервые, в противном случае - False).

Во время выполнения кода я заметил, что объем памяти на диске, занимаемый меньшими файлами в целом, вероятно, станет больше, чем в три раза размер одного большого CSV.

Итак, вот мои вопросы:

  • это нормальное поведение? (возможно, но я спрашиваю на всякий случай)
  • можно ли уменьшить размер файлов? (разные форматы файлов?) [решено путем сжатия, см. обновление ниже и комментарии]
  • Есть ли лучшие типы файлов для этой ситуации по сравнению с CSV?

Обратите внимание, что я не обладаю обширными знаниями в области программирования, я просто использую Python для своей диссертации.

Заранее спасибо всем, кто поможет.

ОБНОВЛЕНИЕ: благодаря @AshishAcharya и @PatrickArtner я узнал, как использовать сжатие при записи и чтении CSV. Тем не менее, я хотел бы знать, есть ли какие-либо типы файлов, которые могут быть лучше, чем CSV для этой задачи.

НОВЫЙ ВОПРОС: (может быть, глупый вопрос) работает ли добавление для сжатых файлов?

ОБНОВЛЕНИЕ 2: с использованием опции сжатия Я заметил кое-что, чего не понимаю. Чтобы определить размер папок, меня научили использовать команду du -hs <folder>, но использование ее в папке, содержащей сжатые файлы, или в папке, содержащей несжатые файлы, приводит к одинаковому значению «3,8 ГБ» (обе создаются с использованием одинаковых первые 5М рядов от большого CSV). Вместо этого из файлового менеджера (Nautilus) я получаю около 590 МБ для одного, содержащего несжатый CSV, и 230 МБ для другого. Чего мне не хватает?

...