LINUX.ORG.RU

Сортировка больших файлов


2

2

Предлагаю холивар: имеется текстовой файл размером в 10 метров, состоящий из неотсортированного массива чисел, в одной строке - одно число. Нужно прочитать исходный файл кусками по миллиону строк, отсортировать каждый кусок и записать его в отдельный временный файл. Потом нужно пробежаться по этим временным файлам и смержить все в итоговую сортировку в один результирующий файл. Смысл - в ограничении памяти, ее немного, поэтому используем дисковое пространство. Я наваял решение на питоне, которое выложу чуть попозже. На моей машинке 11-метровый файл (5 миллионов строк) перемалывается порядка минуты.

Финальная сортировка выглядит так:

f_output = open('output.txt', 'a')
for x in heapq.merge(*iters):
  f_output.write(str(x)+'\n')
f_output.close()

Кто быстрее ?

★★★★★

Последнее исправление: kto_tama (всего исправлений: 1)
Ответ на: комментарий от proud_anon

Не, ну пожалуйста, я не против. Просто с интами фиксированного размера у всякой скриптопетушни хоть какой-то шанс ещё бы был.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Не, ну пожалуйста, я не против. Просто с интами фиксированного размера у всякой скриптопетушни хоть какой-то шанс ещё бы был.

Наоборот же, у скриптовых яп очень большой оверхед на маленькие объекты. Шансы есть если работать с длинными строками

mashina ★★★★★
()
Ответ на: комментарий от mix_mix

Просто с интами фиксированного размера у всякой скриптопетушни хоть какой-то шанс ещё бы был.

Не уверен... плохая работа с числами большого объёма, а особенно их парсинг из текста, в наколеночной программе на сях может быть хуже.

P.S.Правда, у автора надо читать по миллиону строк, а у меня их всего менее 500.000... ну, можно читать по 100.000.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

да, я так и прописал кстати - по 100000 строк

kto_tama ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.