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

Polars使用Lazy API结合分类特征做Join未按预期运行是什么原因

问题原因
  • 你对官方文档的描述存在理解偏差:官方提到的Lazy API无需额外配置字符串缓存,前提是分类类型的转换逻辑包含在同一个全局查询计划中,由Polars在查询优化阶段统一处理缓存共享。
  • 你当前的写法是先分别得到两个独立的LazyFrame,再各自对admin列执行分类类型转换,两个转换逻辑分属独立的上下文,Polars无法自动识别两个分类列需要共享字符串缓存,因此抛出错误,这不属于Polars的bug。
正确实现方案

推荐将分类转换逻辑提前到上游的公共DataFrame中,保证两个分支的分类列来自同源的转换逻辑,无需手动开启全局字符串缓存即可正常运行,示例代码如下:

# 提前对公共输入的admin列做分类转换,再生成LazyFrame
admin_df = admin_df.with_columns(
    pl.col("admin").cast(pl.Categorical)
).lazy()

# 后续分组聚合逻辑直接复用已经转好分类的列
count = admin_df.groupby(['admin','EVENT_DATE']).pivot(pivot_column='FIVE_TYPE',values_column='count').first()
fatalities = admin_df.groupby(['admin','EVENT_DATE']).pivot(pivot_column='FIVE_TYPE',values_column='FATALITIES').first()

admin_df = fatalities.join(count,on=['admin','EVENT_DATE']).collect()

你目前使用with pl.StringCache():包裹全量代码的方案也是可行的,适合不方便调整转换逻辑位置的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:45:02