You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Polars LazyFrame的逻辑计划添加自定义调试标签?

给Polars LazyFrame的逻辑计划添加自定义标签(调试依赖关系)

Polars目前没有内置的label_logical_plan方法,但可以通过添加无副作用的自定义操作节点来实现给逻辑计划打标签的需求,完全不影响最终计算结果,仅用于调试依赖关系。

实现方法

写一个简单的自定义函数,利用map_batches的name参数给逻辑计划节点添加标签:

import polars as pl

def label_lazyframe(lf: pl.LazyFrame, label: str) -> pl.LazyFrame:
    # 添加无操作的map_batches,用label作为节点名称
    return lf.map_batches(lambda df: df, name=f"LABEL: {label}")

使用示例

按照你的需求改造代码:

a = pl.DataFrame({'a':[1,2,3]}).with_row_count()
lazy1 = a.lazy().select(pl.all().first())
lazy2 = a.lazy().select(pl.all().last()-2)

# 给LazyFrame添加标签后执行JOIN
result = label_lazyframe(lazy1, 'lazy1').join(label_lazyframe(lazy2, 'lazy2'), on='row_nr')

查看带标签的逻辑计划

直接打印逻辑计划(注意:如果Polars的查询优化移除了无操作节点,需禁用优化):

# 禁用优化确保标签节点不被移除
print(result.describe_plan(optimization_level=0))

输出效果

逻辑计划会在对应分支顶部显示你定义的标签,类似如下结构:

INNER JOIN:
LEFT PLAN ON: [col("row_nr")]
  LABEL: lazy1
    SELECT [col("row_nr"), first(col("a"))]
      WITH_ROW_COUNT
        DF ["a"]; PROJECT */1 COLUMNS
RIGHT PLAN ON: [col("row_nr")]
  LABEL: lazy2
    SELECT [col("row_nr"), (last(col("a")) - 2)]
      WITH_ROW_COUNT
        DF ["a"]; PROJECT */1 COLUMNS
END INNER JOIN

关键说明

  • map_batches(lambda df: df)是完全无副作用的操作,仅用来在逻辑计划中插入带名称的节点
  • 禁用优化(optimization_level=0)是为了防止Polars将无操作节点优化掉,确保标签保留用于调试
  • 这种方式可以清晰区分多个复杂LazyFrame的依赖分支,满足你的调试需求

内容的提问来源于stack exchange,提问作者iliya malecki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:37:36