Я получил несколько файлов CSV, которые мне нужно объединить в один файл, все с общим ключом, который я могу использовать для их объединения. К сожалению, каждый из этих файлов имеет размер около 5 ГБ (несколько миллионов строк, около 20-100 + столбцов), поэтому нецелесообразно просто загружать их в память и выполнять объединение против каждого из них, но я знаю, что я не нужно беспокоиться о существующих конфликтах столбцов между ними.Выполнение соединений на очень больших наборах данных
Я попытался сделать индекс строки для каждого файла, соответствующего каждому идентификатору, поэтому я мог просто вычислить результат, не используя много памяти, но, конечно, это медленнее, когда время само по себе пытается на самом деле искать каждую строку, тянуть остальные данные CSV из строки, объединяют их с данными процесса и затем записывают в файл. Это просто невозможно, даже на SSD, обрабатывать миллионы строк в каждом файле.
Я также попробовал просто загрузить некоторые из меньших наборов в памяти и запустить параллель. Перед ними сопоставить необходимые данные, чтобы сбрасывать обратно во временный объединенный файл. Хотя это было быстрее, чем последний метод, у меня просто нет памяти для этого с большими файлами.
Мне бы хотелось просто сделать полное левое соединение с самым большим файлом, а затем полностью левым присоединиться к каждому последующему уменьшенному файлу, чтобы он все сливался.
Как я могу по-другому подойти к этой проблеме? У меня есть 24 ГБ памяти в этой системе для работы и шесть ядер для работы.
Хотя это может быть проблемой для загрузки в реляционную базу данных и присоединиться к ней, я подумал, что я дойду до этого маршрута, чтобы узнать, есть ли какие-либо идеи в решении этого вопроса из моего локальная система.
Спасибо!
К сожалению, у меня есть необходимость присоединения к нему с ключом (который к счастью, в первом столбце всех файлов), поэтому я не могу просто конкатенировать все, но спасибо! – Xaniff