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

Rust Polars调用reset_string_cache()后能否复用原全局字符串缓存?

关于Rust Polars中reset_string_cache()后复用全局字符串缓存的问题

问题描述

运行以下Rust Polars代码时,由于在创建out2前调用了reset_string_cache(),生成了两个全局字符串缓存。现询问:调用reset_string_cache()后,能否创建使用与out1相同全局字符串缓存的另一分类变量?

use polars_core::prelude::*;
use polars_core::{reset_string_cache, toggle_string_cache};

fn main() {
    let slice1 = &[
        Some("foo"),
        None,
        Some("bar1"),
        Some("foo"),
        Some("foo"),
        Some("bar1"),
    ];
    let slice2 = &[
        Some("foo"),
        None,
        Some("bar2"),
        Some("foo"),
        Some("foo"),
        Some("bar2"),
    ];

    toggle_string_cache(true);

    let ca1 = Utf8Chunked::new("a", slice1);
    let out1 = ca1.cast(&DataType::Categorical(None)).unwrap();
    let out1 = out1.categorical().unwrap().clone();
    let rev_map_global1 = out1.get_rev_map();
    println!("{:?}", rev_map_global1);

    reset_string_cache();

    let ca2 = Utf8Chunked::new("b", slice2);
    let out2 = ca2.cast(&DataType::Categorical(None)).unwrap();
    let out2 = out2.categorical().unwrap().clone();
    let rev_map_global2 = out2.get_rev_map();
    println!("{:?}", rev_map_global2);
}

回答

不能,原因如下:

  • reset_string_cache()会直接清空并重置全局字符串缓存,out1原本使用的缓存实例已经被销毁,无法再被后续创建的分类变量复用。
  • 调用reset_string_cache()后,后续创建的分类变量(如示例中的out2)会使用全新的全局缓存实例,和out1的缓存完全独立。
  • 如果需要让多个分类变量共享同一套字符串映射,应该避免调用reset_string_cache(),或者手动创建自定义的CategoricalPool,通过DataType::Categorical(Some(Arc::new(pool)))的方式指定共享池,来生成使用同一映射的分类变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:45:41