如何在Polars中并行化str.split操作
让Polars拆分逗号分隔列时利用全部CPU的方案
核心优化步骤
显式配置全局线程数
在代码开头添加线程数设置,强制Polars使用系统所有可用核心:pl.set_threads(pl.available_parallelism())pl.available_parallelism()会自动检测当前系统的CPU核心数量,无需手动指定数值。保持矢量化操作
你当前使用的pl.col("tags").str.split(",")是Polars原生矢量化操作,本身支持并行执行,不要改成apply这类单线程逻辑,避免破坏并行能力。读取文件时启用内存映射
虽然不直接提升并行度,但内存映射可以减少内存拷贝开销,让CPU资源更集中在计算上:df = pl.read_ipc("items.fth", memory_map=True)
调整后的完整代码
import polars as pl # 配置使用全部CPU线程 pl.set_threads(pl.available_parallelism()) # 内存映射读取未压缩Feather文件 df = pl.read_ipc("items.fth", memory_map=True) # 并行拆分tags列 tags_df = df.select(pl.col("tags").str.split(","))
补充说明
如果你的tags列存在大量极短或格式高度统一的字符串,Polars可能因并行开销大于收益而自动用单线程执行,但1000万行的数据集基本不会触发这种优化。
内容的提问来源于stack exchange,提问作者jamarju
相关产品推荐
相关产品推荐

