大文件上的 dask 数据帧内存问题
dask dataframe memory issue on large file
a = dd.read_csv('huge.csv', blocksize=1e6)
g = a.groupby(['col_a', 'col_b'])
g.col_c.sum().max().compute() # failed, MemoryError
我认为 dask.dataframe
不会因内存问题而失败,但是呢?
顺便说一句,我认为 blocksize
很重要,如果我设置一个非常小的尺寸,比如说 1e3,read_csv
会永远完成....
默认情况下,Groupby 聚合会缩减为单个分区。如果您的结果有很多组,那么这个单个分区可能会非常大。您可以考虑将 split_out=
关键字设置为 groupby.sum 某个适中的数字,例如 10。
g.col_c.sum(split_out=10).max().compute()
这将导致 groupby 聚合结果被分成十个分区,而不是一个分区。
我不知道这是否真的是你的问题,如果这不起作用,那么我建议创建一个 minimal complete verifiable example
此外,您可能需要更大的块大小。 1MB 的块非常小。我会拍摄 10-100 倍,或者,更好的是,将其保留为默认值。
a = dd.read_csv('huge.csv', blocksize=1e6)
g = a.groupby(['col_a', 'col_b'])
g.col_c.sum().max().compute() # failed, MemoryError
我认为 dask.dataframe
不会因内存问题而失败,但是呢?
顺便说一句,我认为 blocksize
很重要,如果我设置一个非常小的尺寸,比如说 1e3,read_csv
会永远完成....
默认情况下,Groupby 聚合会缩减为单个分区。如果您的结果有很多组,那么这个单个分区可能会非常大。您可以考虑将 split_out=
关键字设置为 groupby.sum 某个适中的数字,例如 10。
g.col_c.sum(split_out=10).max().compute()
这将导致 groupby 聚合结果被分成十个分区,而不是一个分区。
我不知道这是否真的是你的问题,如果这不起作用,那么我建议创建一个 minimal complete verifiable example
此外,您可能需要更大的块大小。 1MB 的块非常小。我会拍摄 10-100 倍,或者,更好的是,将其保留为默认值。