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