用法
使用惰性API时,Polars不会逐行执行每个查询,而是端到端地处理整个查询。为了充分利用Polars,使用惰性API非常重要,因为:
- lazy API 允许 Polars 使用查询优化器应用自动查询优化
- lazy API 允许您使用流式处理来处理大于内存的数据集
- 懒加载API可以在处理数据之前捕获模式错误
这里我们看到了如何从文件或现有的DataFrame开始使用惰性API。
从文件使用懒加载API
在理想情况下,我们会直接从文件中使用惰性API,因为查询优化器可能帮助我们减少从文件中读取的数据量。
我们从Reddit CSV数据创建一个懒查询并应用一些转换。
通过以pl.scan_csv开始查询,我们正在使用惰性API。
scan_csv · with_columns · filter · col
q1 = (
pl.scan_csv(f"docs/assets/data/reddit.csv")
.with_columns(pl.col("name").str.to_uppercase())
.filter(pl.col("comment_karma") > 0)
)
一个pl.scan_函数可用于多种文件类型,包括CSV、IPC、Parquet和JSON。
在这个查询中,我们告诉Polars我们想要:
- 从Reddit CSV文件加载数据
- 将
name列转换为大写 - 对
comment_karma列应用过滤器
此时不会执行惰性查询。有关运行惰性查询的更多信息,请参阅此页面上的 执行惰性查询。
使用来自DataFrame的懒加载API
访问惰性API的另一种方法是在已经在内存中创建的DataFrame上调用.lazy。
q3 = pl.DataFrame({"foo": ["a", "b", "c"], "bar": [0, 1, 2]}).lazy()
通过调用.lazy,我们将DataFrame转换为LazyFrame。