假设我们有一个 100k 行或约 2gB 的文件,我们希望将它分成 10 个块,每个块 10k 行,以便可以并行处理这些块。有什么方法可以在 10 个块的每一个的起始行中创建指针,而无需遍历整个文件?我正在考虑以某种方式根据文件大小划分文件,以便每 200mB 创建指针。这甚至可行吗?
1 回答

呼唤远方
TA贡献1856条经验 获得超11个赞
是的当然。但是您需要做出一些假设并接受您的块将不准确。
要么假设标准线长,要么扫描几条线并测量它。然后你将它乘以你想要的行数,并希望这是一个很好的估计。
或者,如果您只想要 10 个块,则取文件大小并除以 10。
因此,您可以使用 lseek 和 read、pread 或 mmap 跳转到文件中的那个点。然后向前扫描,直到找到一行的结尾和下一行的开头。
除非您实际计算每一行,否则它不会是精确的行数。但它会非常接近。
我很无聊和好奇,所以看看这个:
https ://github.com/zlynx/linesection
- 1 回答
- 0 关注
- 170 浏览
添加回答
举报
0/150
提交
取消