我有一个由100,000+行组成的数据框,每行有100,000列,总计为10,000,000,000浮点值。是否可以将巨大的数据帧保存到实木复合地板中?
我已经成功在csv
(制表符分隔)文件中读取他们以前和我他们成功读取到50个核至强机250GB RAM,并尝试写出来作为.parq
目录,例如:
huge.csv
中的花车被保存为字符串,它是125GB。
import dask.dataframe as dd
filename = 'huge.csv'
df = dd.read_csv(filename, delimiter='\t', sample=500000000)
df.to_parquet('huge.parq')
已写入huge.parq
了近一个星期,该目录是14GB而且好像节省.to_parquet
不会很快停止任何时间的过程。
而且free -mh
是显示还是有留下的可用内存,但它采取挽救.parq
目录的时间是极其缓慢:
$ free -mh
total used free shared buff/cache available
Mem: 251G 98G 52G 10M 101G 152G
Swap: 238G 0B 238G
的问题是:
鉴于大小数据帧和机器是否可以将dask数据帧保存到parquet文件中?
dask
和fastparquet
花费这么长时间来保存巨大的数据帧是否正常?有什么方法可以估计保存镶木地板文件所用的时间吗?
10e9浮点值对我来说似乎并不重要。 1e5列虽然。你有没有考虑过使用dask.array和HDF5?这些可能更适合在两个维度上进行阻止。 – MRocklin
有没有理由为什么dask.array和HDF5对于>>> no的数据框更好。列?什么是“阻塞”? – alvas
每个分区有多少行? read_csv按字节数分割,所以我期望有一小部分。对于每个分区的每一列,都有一段必须存在的元数据,使得您的元数据比我以前见过的任何元数据都大 - 但我期望它能够正常工作。对于存储阵列式的100kx100k浮点数,我实际上推荐[zarr](http://zarr.readthedocs.io/en/latest/)。 – mdurant