Hasty Briefsbeta

双语

Extending Polars with Rust Expression Plugins

a day ago
  • fenic 是一个语义化的 DataFrame 库,以 Polars 为核心执行引擎,用于处理非结构化数据的 AI/LLM 管道。
  • 标准的 Polars 缺少所需的文本操作(如分块、提示模板、jq、模糊匹配、Markdown/转录解析以及丰富的类型转换)。
  • Python UDF 速度太慢,破坏了可组合性,并且对这些操作的类型处理能力不足。
  • 解决方案是通过 pyo3-polars 构建了九个 Rust 表达式插件,使其成为原生的 Polars 表达式。
  • 这些插件在 Arrow 缓冲区上于引擎内运行,支持向量化、可组合,并带有明确的输出类型声明。
  • 输出类型声明至关重要,可以是静态的、从输入字段派生的,或通过关键字参数指定。
  • 元素级标志支持并行处理和流式操作;广播通过 Polars 辅助函数处理。
  • 零拷贝的 Arrow 访问通过自定义的 ArrowToValue 特征实现,该特征支持嵌套类型的递归处理。
  • 插件返回 pl.Expr,允许在单个表达式树中与原生 Polars 操作组合。
  • 构建过程使用带有单一 Rust crate 的 maturin;插件还导出纯 Python 函数用于验证。