У меня есть большой файл (100 ГБ +). Я хочу параллельно обрабатывать его. Я хочу разбить его так, чтобы первый файл содержал строки от 0 до 1001 М второй файл от 1000 М до 2001 М и т. Д. После обработки файлов у меня есть n перекрывающих друг друга строк между каждыми двумя результатами (n ограничено, но не является константой. предположим, что n может находиться в пределах между 100-900 k строк. Наложение может происходить только в линейном уровне) есть какой-то способ достичь этой задачи или мне нужно написать разбиение и слияние с помощью C?Перекрытие разделения и слияния большого текстового файла
ответ
Похоже, вы пытаетесь заново изобретать колесо
Map/Reduce и его реализация в Hadoop была изобретена именно «У меня есть большой файл (100 ГБ +). Я хочу, чтобы параллельно процессу его. "
С момента изобретения Hadoop было добавлено много дополнений к панели инструментов bigdata. Я бы предложил вам посмотреть spark и, возможно, python-spark, если вам нравится C, то вам, вероятно, понравится python. На мой взгляд, это совершенно естественный следующий шаг (если не C++).
В противном случае файлы разбиения могут быть выполнены с помощью bash путем укладки команд tee в потоках с head и tail, прикрепленных к выходным потокам. Вам нужно будет сделать двоичный раскол на каждом шаге, в основном, на половину файла на каждом шаге. Команда становится довольно сложной, но я сделал это раньше, и она работает. Просто не ожидайте, что код, который вы создаете, будет понятен кому-то другому, он становится очень грязным. Я бы посоветовал против persuing эту линию работы и использовать то, что уже было проверено и доказано, такие, как Hadoop
Вот один из способов вы можете использовать AWK, чтобы разбить файл на перекрывающихся куски:
BEGIN { file_f = -1 } # initialise file suffix
{ l = NR % 20 } # 20 is the repeat length
l == 1 { f = 1; file_f += 2 } # f is set for lines 1 to 12, inclusive
l == 13 { f = 0 }
l == 11 { g = 1; file_g +=2 } # g is set for lines 11 to 2, inclusive
l == 3 { g = 0 }
f { print >"file_"file_f }
g { print >"file_"file_g }
флаг f
обрабатывает «нечетные» куски и g
обрабатывает «четные». Суффиксы file_f
и file_g
увеличиваются на 2 для каждого нового фрагмента, что приводит к последовательно пронумерованным выходным файлам.
Тестирование это на небольшом примере (обратите внимание, что номера строк в начале AWK из 1):
$ seq 22 > file
$ awk -f script.awk file
$ cat file_1
1
2
3
4
5
6
7
8
9
10
11
12
$ cat file_2
11
12
13
14
15
16
17
18
19
20
21
22
$ cat file_3
21
22
- 1. Стратегия разделения большого файла JSON
- 2. Поиск большого текстового файла
- 3. Сжатие большого текстового файла
- 4. Обработка большого текстового файла
- 5. Очистка большого текстового файла
- 6. Python разделения и слияния линии
- 7. Разбор большого текстового файла с использованием regex
- 8. Чтение большого текстового файла и памяти
- 9. PHP - открытие и редактирование большого текстового файла
- 10. Это правильный способ разделения большого файла?
- 11. Java- Разбор большого текстового файла
- 12. Поиск большого текстового файла Python
- 13. Чтение большого текстового файла быстрее
- 14. Чтение и обработка большого текстового файла 25 ГБ
- 15. Подсчет инверсии для большого текстового файла
- 16. Как разделить данные и дату разделения из текстового файла?
- 17. Извлечение и копирование строк и столбцов из большого текстового файла
- 18. Чтение большого текстового файла в кусках Обработка
- 19. Чтение случайной строки из большого текстового файла
- 20. Разбор большого текстового файла Python vs C#
- 21. Разбор большого текстового файла в C++
- 22. быстрый способ чтения большого текстового файла
- 23. Функция для разделения текстового файла на два файла
- 24. Получить прогресс в чтении большого текстового файла
- 25. Чтение большого текстового файла с одной строкой
- 26. Поиск большого текстового файла с python
- 27. Прочитайте n строк большого текстового файла
- 28. Разбор очень большого текстового файла на Windows
- 29. запрос большого текстового файла, содержащего объекты JSON
- 30. Сортировка очень большого текстового файла в Java
Было бы гораздо полезнее, если бы вы показали нам небольшой пример того, что вы хотите сделать (и желательно, ваша попытка сделать это). Конечно, полезно знать, что вы намереваетесь работать с гораздо большими файлами, но принципы, вероятно, будут похожи. –