我有几个gzip文件(每个3.5 as ),到目前为止,我使用Pandas来读取这些文件,但它非常慢,我也尝试过Dask,但它似乎不支持gzip文件中断。有没有更好的方法来快速加载这些庞大的gzip文件?
Dask和Pandas代码:
df = dd.read_csv(r'file', sample = 200000000000,compression='gzip')
我希望它能尽可能快地读取整个文件。
发布于 2019-08-09 21:17:23
gzip本质上是一种相当慢的压缩方法,而且(如您所说)不支持随机访问。这意味着,到达位置x的唯一方法是从头开始扫描整个文件,这就是为什么Dask在这种情况下不支持尝试并行化。
如果您至少想使用并行解析,那么最好的做法是首先解压缩整个文件,这样分块机制才有意义。您还可以将其拆分成几个文件,然后压缩每个文件,以便所需的总空间是相似的。
请注意,在理论上,一些支持分块随机访问的压缩机制,但我们还没有找到任何具有足够社区支持的压缩机制来在Dask中实现它们。
不过,最好的答案是以parquet或orc格式存储数据,这种格式具有内部压缩和分区功能。
发布于 2020-02-11 22:32:57
一种选择是为python使用package datatable:https://github.com/h2oai/datatable
例如,使用函数fread,它可以比pandas (到gzip)的读/写速度快得多
import datatable as dt
df = dt.fread('file.csv.gz')
稍后,可以将其convert到pandas dataframe:
df1 = df.to_pandas()
目前,datatable仅为available on Linux/Mac。
发布于 2019-08-09 07:54:29
您可以尝试使用gzip库:
import gzip
f = gzip.open('Your File', 'wb')
file_content = f.read()
print (file_content)
https://stackoverflow.com/questions/57421905
复制相似问题