读取 .csv 文件比读取压缩为 .gz 的相同文件更快

Posted

技术标签:

【中文标题】读取 .csv 文件比读取压缩为 .gz 的相同文件更快【英文标题】:Reading a .csv file faster than reading same file compressed as .gz 【发布时间】:2016-10-24 10:32:58 【问题描述】:

似乎有点讽刺,但当我使用 BufferedReader 逐行读取 2GB .csv 文件时,大约需要 4.5 秒。我用 gzip 压缩了文件,大约 230MB。我使用带有 BufferedReader 的 GZIPInputStream 来读取 .gz 文件。大约需要 8.5 秒。

我知道 InputStream 接口读取字节数据而不是 Readers,但我假设如果 200MB 文件被证明加载到内存中会更快。使用 .gz 是否可以实现更好的性能?谢谢。

【问题讨论】:

【参考方案1】:

GZIPInputStream 在读取文件时正在解压缩文件。 解压缩会产生一些开销,这可以解释所花费的额外时间。

【讨论】:

是的,这也是我的怀疑。我的疑问是我们是否可以通过读取压缩文件以某种方式表现得更好。我尝试修改缓冲区大小,但没有帮助。我假设压缩是一项 IO 密集型任务,因此它不会妨碍 CPU 任务时间。如果我假设错误,请纠正我。 压缩对 CPU 的压力更大。您基本上是在用磁盘空间换取 CPU 使用率【参考方案2】:

您的计算机解压缩文件需要多长时间?我可以猜一下8.5 - 4.5 = 4 秒吗?我想这是需要额外时间的原因之一。

【讨论】:

以上是关于读取 .csv 文件比读取压缩为 .gz 的相同文件更快的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 gzip 压缩选项的 pandas read_csv 读取 tar.gz 文件?

如何使用 spark DF 或 DS 读取“.gz”压缩文件?

读取 tar.gz 中的文件名或文件数

Perl | Perl读取gzip压缩文件

如何将压缩(gz)CSV文件读入dask Dataframe?

在python中读取csv压缩文件