Файл содержит большое количество (например, 10 миллиардов) строк, и вам нужно найти повторяющиеся строки. У вас есть N доступных систем. Как вы найдете дубликатыНайти повторяющиеся строки в большом файле
ответ
Разделите файл на N штук. На каждой машине загрузите как можно больше фрагмента в память и отсортируйте строки. Напишите эти куски для массового хранения на этой машине. На каждой машине объедините куски в один поток, а затем объедините поток с каждой машины в поток, содержащий все строки в отсортированном порядке. Сравните каждую строку с предыдущей. Если они одинаковы, это дубликат.
Чтобы объединить куски в один поток, вам придется загружать все записи в память. Для файла с 1 мильной записью все записи на 1 мил должны быть в памяти на последнем шаге слияния в вышеуказанном алгоритме? Если да, то это побеждает цель. –
@AndyDufresne «Чтобы объединить куски в один поток, вам придется загружать все записи в память». Нет, нет. Вам нужно только достаточно памяти для загрузки следующей строки из каждого фрагмента одновременно, чтобы сравнить их. Как только сравнение будет выполнено, следующая строка займет это пространство памяти. – erickson
Я не понял ваш алгоритм слияния. Скажем, у нас есть 1 миллионный файл записи, и в память можно загрузить только 5k записей. Из того, что я понял, мне нужно сначала разделить файл на N штук с 5K записей каждый. Затем отсортируйте все записи в каждом файле 5k записей и напишите обратно. Чтобы объединить два файла записи 5k, мне нужно было бы загрузить 10k записей в памяти? Если это не то, что вы имели в виду, можете ли вы объяснить шаги, чтобы найти дубликаты записей в файле с 1 миллионом с ограничением памяти для загрузки только 5k записей. –
Ответ эриксона, вероятно, тот, кого ожидал тот, кто задал этот вопрос.
Вы можете использовать каждый из машин N как ведро в Hashtable:
- для каждой строки (скажем, номер строки я в последовательности) вычислить хэш-функцию на нем, ч.
- отправьте значения i и h на номер машины n для хранения, где n = h% N.
- с каждой машины, получить список всех значений хэша h, для которых было получено более одного индекса, вместе со списком индексов.
- проверять наборы строк с равными значениями хеша, чтобы убедиться, что они на самом деле равны.
Если честно, то для 10 миллиардов строк вы могли бы правдоподобно сделать это на 1 ПК. Хэш-таблица может занимать примерно 80-120 ГБ с 32-битным хешем, в зависимости от точной реализации хэш-таблицы. Если вы ищете эффективное решение, вы должны быть немного более конкретным, что вы подразумеваете под «машиной», потому что это зависит от того, сколько хранения у каждого есть, и относительной стоимости сетевой связи.
- 1. Найти дубликаты в большом файле
- 2. Как найти уникальные строки в большом файле?
- 3. Найти повторяющиеся строки начинаются в текстовом файле
- 4. Найти дубликаты записей в большом текстовом файле
- 5. Найти и заменить в большом файле
- 6. Поиск определенной строки в большом файле
- 7. Найти подстроку в очень большом файле (javaSE)
- 8. Найти наиболее хит URL в большом файле
- 9. Найти шаблон в большом текстовом файле быстро?
- 10. найти строку в очень большом одиночном файле
- 11. Найти повторяющиеся/повторяющиеся строки в иерархическом sql
- 12. Разбиение строки по разделителю в большом файле
- 13. Редактирование одной строки в большом текстовом файле
- 14. Как найти повторяющиеся строки в текстовом файле соединения
- 15. Как найти повторяющиеся строки?
- 16. Найти повторяющиеся строки в sql
- 17. Удалить повторяющиеся строки в файле по шаблону
- 18. Как найти повторяющиеся слова в текстовом файле?
- 19. Найти последнее вхождение подстроки в строке в большом текстовом файле
- 20. Удалить повторяющиеся строки в текстовом файле
- 21. Как устранить повторяющиеся строки в файле: python
- 22. Удалить повторяющиеся строки в текстовом файле
- 23. Как подсчитать повторяющиеся строки в txt-файле
- 24. Найти самые длинные повторяющиеся строки?
- 25. C# Linq найти повторяющиеся строки
- 26. обновление строки в большом текстовом файле с помощью Scala
- 27. Excel: найти повторяющиеся строки в нескольких столбцах
- 28. найти повторяющиеся строки в команде тузды
- 29. Найти наиболее повторяющиеся строки в матрице
- 30. Найти повторяющиеся строки в нескольких столбцах
Это домашнее задание? Это звучит как домашнее задание. – SoapBox