我有500个csv文件, 它们每个的大小约为10~20M。
对于样本,文件中的内容如下↓
file1:
column1 column2 column3 column4 .... column50
file2的:
column51 column52 ... ... column100
所以,我想要做的是将所有文件合并到一个大文件中,如下面的↓
fileAll
column1 , column2 ...... column2500
现在我的解决方法是
1, Merge per 100 files into 5 large files
2, Merge 5 large files into one large file
但表现非常糟糕。
那么,有人可以给我一些改善表现的建议吗?
谢谢!
答案 0 :(得分:1)
您可以尝试将其作为流式操作;不要1.加载文件1,2。加载文件2,3。合并,4。写入结果。而是1.加载文件1和1的第1行。 2,2。合并线,3。写行。这样,您可以通过执行较小的读取,处理,写入操作来加快速度,从而允许磁盘在每行(行)合并时清空其读/写缓冲区。可能还有其他因素会减慢您的流程。请邮寄代码。例如,如果不仔细完成,字符串操作可能很容易减慢速度。最后,Release模式(与Debug相反)更加优化,通常运行得更快。
答案 1 :(得分:1)
你在用什么语言工作,我认为你可以通过一行一行来获得最佳性能。
例如,读取所有文件的第一行,写出合并的第一行。继续,直到你完成。
这比你的解决方案更好的原因是你的解决方案多次从磁盘读取和写入相同的数据,这很慢。我假设你无法将所有文件都放在内存中(并且你不会想要,缓存会很糟糕),但是你想要最小化磁盘读写(最慢的操作)并尝试在一种方式,每个要编写的段都可以放在缓存中。
所有这些,取决于你使用的语言,你可能会在连接字符串上受到巨大打击。并且使用空终止数组作为其字符串实现的语言将连接大字符串,因为它必须搜索空终止符。 python是我头脑中的一个例子。因此,您可能希望限制使用的字符串的大小。在上面的例子中,读入x多个字符,写出x多个字符等。但是你仍然应该只读一次数据,并尽可能地将数据写出来。