Разделение файла на несколько частей - PullRequest
0 голосов
/ 31 января 2020

Давайте предположим, что у нас есть файл размером 100 тыс. Строк или ~ 2 ГБ, и мы хотим разделить его на 10 блоков по 10 тыс. Строк каждый, чтобы затем можно было обрабатывать их параллельно. Есть ли способ создать указатели в стартовой строке каждого из 10 фрагментов, не обходя весь файл? Я думал о том, чтобы как-то разделить файл по размеру, чтобы указатели создавались каждые 200 мБ. Это вообще возможно?

1 Ответ

0 голосов
/ 31 января 2020

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

Либо примите стандартную длину строки, либо отсканируйте несколько строк и измерьте ее. Затем вы умножаете это на количество строк, к которым вы стремитесь, и просто надеетесь, что это хорошая оценка.

Или если вы просто хотите, чтобы 10 кусков взяли размер файла и поделили на 10.

Так затем вы переходите к этой точке в файле, используя lseek и read, pread или mmap. Затем вы сканируете вперед, пока не найдете конец строки и начало следующей.

Это не будет точным подсчетом строк, если вы фактически не будете считать каждую строку. Но это будет довольно близко.

Мне было скучно и любопытно, так что проверьте это:
https://github.com/zlynx/linesection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...