0

要有效地将大型数据集加载到 Polars 中,可以使用惰性 API 和scan_*函数。这在我们执行聚合时效果很好(所以我们有一个很大的输入数据集但很小的结果)。但是,如果我想完整地处理一个大数据集(例如,更改列的每一行中的值),似乎没有办法使用collect整个(结果)数据集并将其加载到内存中。

是否可以直接将 LazyFrame 写入磁盘,并让处理按顺序对数据集的块进行操作,以限制内存使用?

4

1 回答 1

1

Polars 的算法不是流式传输的,因此它们需要内存中的所有数据来执行 join、groupby、聚合等操作。因此直接写入磁盘仍然会将那些中间DataFrames 放在内存中。

你当然可以做一些事情。根据您执行的查询类型,它可能会令人尴尬地并行化。例如,总和可以很容易地以块的形式计算。

您还可以以较小的块处理列。这使您仍然可以计算更难的聚合/计算。

使用懒惰

如果您的查询中有许多过滤器并且 Polars 能够在扫描时执行它们,那么您的内存压力就会降低到选择性比率。

于 2022-02-07T17:39:00.690 回答