从 Pandas 到 Polars 三十三:在Polars中启用流式模式

Polars的流式模式可以处理大于内存容量的数据集。在这种模式下,Polars会分批次处理您的数据,而不是一次性处理全部数据。(它允许应用程序在数据到达时实时地处理数据,而不是等待所有数据都到达后再进行处理。)然而,流式模式并不是只在内存不足时才使用的紧急开关。对于许多查询来说,流式模式的速度与非流式模式相当或更快。

这意味着,如果你正在处理较大的数据集,特别是如果你正在构建希望未来能够处理更大数据集的管道时,保持流式模式的开启是值得的。

流式处理和非流式处理的简单示例

要在流式模式下工作,我们只需在评估查询时向collect函数传递streaming=True参数。

首先,我们创建一个包含100万个行、100个浮点数列和一个整数ID列的DataFrame。

import polars as plimport numpy as np

N = 1_000_000K = 100
df = (
    pl.DataFrame(
        np.random.standard_normal((N,K))
    )
    # Add an ID column    .hstack(
        pl.DataFrame(
            np.random.randint(0,9,(N,1)
            )
        )
        .rename(
            {'column_0':'id'}
            )
        ))

然后,我们按照id列进行分组,并计算剩余列的均值。我们通过设置streaming=True参数在流式模式下执行查询。

(
    df
    .lazy()
    .groupby('id')
    .agg(
        pl.all().mean()
    )
    .collect(
        streaming=True
    ))

如果我们比较使用streaming=True和streaming=False(默认)的查询,我发现流式模式的平均时间为75毫秒,而非流式模式为120毫秒。相比之下,Pandas完成这个查询大约需要330毫秒。

结论

对于许多查询,流式模式可能是一个很好的默认选择——而不是只有在遇到内存问题时才应该使用的应急按钮。

不过,我不能保证流式模式总是至少与非流式模式一样快,因为Polars中的流式技术仍在开发中,肯定存在流式模式会显著变慢的使用场景。如果你发现这样的情况,非常欢迎你在Polars的discord上讨论。

另外请注意,目前并非所有延迟模式下的操作都支持流式处理,但它确实适用于核心操作,如groupby和join。

 往期热门文章:

从 Pandas 到 Polars 二十六:在Polars中,不要遍历列

从 Pandas 到 Polars 二十三:如果你的数据已经排序,Polars可以为你提供助力

从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望

从 Pandas 到 Polars 十三:流式处理的关键参数

从 Pandas 到 Polars 十:“Polars 表达式“是什么?

从 Pandas 到 Polars 六:在 Polars 中流式处理大型数据集

从 Pandas 到 Polars 0:理解Polars嵌套列类型

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值