Как объединить два больших файла в соответствии с некоторыми условиями? - PullRequest
0 голосов
/ 12 ноября 2018

У меня два файла, их размеры больше 1 ТБ. Каждая строка id, name в одном файле. Каждая строка id, age в другой. Я хочу объединить их. Каждое право удержания файла результата похоже на id, name, age. Есть ли хорошее решение?

1 Ответ

0 голосов
/ 12 ноября 2018

Сначала - подумайте об использовании баз данных - они предназначены для идеальной работы такого рода.

Если подход с БД невозможен, подготовьте файлы данных с сортировкой по ключу id.

Есть несколько тем о сортировке больших файлов, внешней сортировке - выберите метод, подходящий для вас.

Если возможно, используйте (я думаю - высоко оптимизированный) утилиту наподобие GNU sort , которая имеет возможность выбирать ключи для сравнения

Затем выполните операцию слияния - прочитайте строки из обоих отсортированных файлов для получения идентичной формы идентификатора и запишите полученную строку. Если значение id меньше, прочитайте следующую строку из соответствующего файла и так далее. Псевдокод:

 while not EOF(fileA) and  not EOF(fileB):
     if lineA.id == lineB.id:
          write(fileC, lineA.id, lineA.name, lineB.age)
          lineA = readNext(fileA)
          lineB = readNext(fileB)
     else if lineA.id < lineB.id:
          lineA = readNext(fileA)
     else:
          lineB = readNext(fileB)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...