У меня есть сценарий, который принимает все файлы csv в каталоге и объединяет их бок о бок, используя внешнее соединение. Проблема в том, что мой компьютер задыхается (MemoryError), когда я пытаюсь использовать его в файлах, которые мне нужно объединить (около двух десятков файлов по 6-12 Гб каждый). Я знаю, что itertools можно использовать, чтобы сделать циклы более эффективными, но я не совсем понимаю, можно ли применить их к этой ситуации. Другая альтернатива, о которой я могу думать, - это установить mySQL, изучить основы и сделать это. Очевидно, я предпочел бы сделать это на Python, если это возможно, потому что я уже изучаю его. Решение на основе R также было бы приемлемым.Эффективное слияние для большого количества огромных файлов csv
Вот мой код:
import os
import glob
import pandas as pd
os.chdir("\\path\\containing\\files")
files = glob.glob("*.csv")
sdf = pd.read_csv(files[0], sep=',')
for filename in files[1:]:
df = pd.read_csv(filename, sep=',')
sdf = pd.merge(sdf, df, how='outer', on=['Factor1', 'Factor2'])
Любые советы о том, как это сделать с файлами слишком большими для памяти моего компьютера был бы весьма признателен.
, который выбросил ряд ошибок, первый из которых был: 'строка 2885, в run_code exec (code_obj, self.user_global_ns, self.user_ns)' – Thoughtcraft
going csv -> hdf5 -> csv на размер файла, Re иметь дело с займет некоторое время, да? я бы попытался пойти csv -> csv, если бы мог – Kosch
Не правда. HDF5 в моих тестах, по крайней мере, в 10 раз быстрее, чем csv. Далее OP не упоминает, что вывод должен быть в csv. Для любой другой реализации потребуется довольно сложный алгоритм, включающий циклы, потому что каждый файл, с которым OP должен иметь дело, составляет 6-12 ГБ. Поэтому, если ОП не находится на суперкомпьютере, вероятность того, что у него много оперативной памяти, сложна. – Kartik