lance

两行代码转换 Parquet,让多模态 AI 数据访问快 100 倍

lance 是一个面向多模态 AI 数据的开源列式存储格式,基于 Rust 和 Apache Arrow 构建。它解决了传统 Parquet 格式在随机访问、向量检索和版本管理上的性能瓶颈,让 AI 训练和数据处理流程更高效。核心能力包括:将 Parquet 转换为 lance 格式仅需两行代码,即可获得高达 100 倍的随机访问加速;内置向量索引,支持高效的相似性搜索;提供数据版本控制,便于追踪和回滚。兼容 Pandas、DuckDB、Polars、PyArrow 和 PyTorch 等主流数据科学和深度学习工具,并持续扩展集成。lance 特别适合需要处理图像、视频、文本等多模态数据的场景,能显著提升数据加载和预处理速度,简化数据管理。

开源 free 基础设施
访问官网 ↗ GitHub ↗ 文档 ↗
GitHub 星标 ★ 7106
维护状态 活跃
是否开源 是
定价模式 free

项目数据

分类基础设施
开发团队lance-format
所属国家
官网地址https://lance.org
定价模式free
价格说明开源项目,Apache-2.0许可证,完全免费,可自行部署使用。
访问状态
是否开源是
开源协议Apache-2.0
主要语言Rust
技术栈/模型apache-arrow,computer-vision,data-analysis,data-analytics,data-centric,data-format,data-science,dataops,deep-learning,duckdb,embeddings,llms,machine-learning,mlops,python,rust
GitHub 星标★ 7106
30天Star增速
HF 下载量
上线时间2022-07-07 00:00:00
最近更新2026-09-22 00:00:00
维护状态活跃
中文支持
访问方式
移动端支持
综合评分
收录时间2026-08-09
浏览次数10

使用教程

难度:入门 约 15 分钟 部署方式:库/依赖 8 步

环境要求

  • Python 环境(需可通过 pip 安装包)
  • pip 包管理器
  • 使用 DuckDB 查询时需 duckdb v0.7+(否则可能 segfault)
  • 会用到 pandas、pyarrow、numpy(示例代码中导入)

安装与启动步骤

  1. 1安装 pylance

    README 给出的标准安装方式,用 pip 安装稳定版 pylance 包即可开始使用。

    pip install pylance
  2. 2可选安装预览版

    预览版发布更频繁,包含最新特性和修复;如需固定版本建议优先用稳定版。

    pip install --pre --extra-index-url https://pypi.fury.io/lance-format pylance
  3. 3将 Parquet 转为 Lance

    用 pandas 造一个 DataFrame,先写成 parquet,再用 lance.write_dataset 转成 lance 格式。

    import lance
    import pandas as pd
    import pyarrow as pa
    import pyarrow.dataset
    
    df = pd.DataFrame({"a": [5], "b": [10]})
    uri = "/tmp/test.parquet"
    tbl = pa.Table.from_pandas(df)
    pa.dataset.write_dataset(tbl, uri, format='parquet')
    
    parquet = pa.dataset.dataset(uri, format='parquet')
    lance.write_dataset(parquet, "/tmp/test.lance")
  4. 4读取 Lance 数据

    用 lance.dataset 打开 .lance 目录,返回的是 pyarrow Dataset,可转成 Pandas DataFrame。

    import lance
    import pyarrow as pa
    
    dataset = lance.dataset("/tmp/test.lance")
    assert isinstance(dataset, pa.dataset.Dataset)
    df = dataset.to_table().to_pandas()
    print(df)
  5. 5下载 sift1m 数据

    README 提供的向量检索示例数据集,用 wget 下载后解压得到 sift 目录。

    wget ftp://ftp.irisa.fr/local/texmex/corpus/sift.tar.gz
    tar -xzf sift.tar.gz
  6. 6写入向量数据

    读取 sift_base.fvecs 二进制,转成向量表后写入 vec_data.lance,可设置分组和文件行数。

    import lance
    from lance.vector import vec_to_table
    import numpy as np
    import struct
    
    nvecs = 1000000
    ndims = 128
    with open("sift/sift_base.fvecs", mode="rb") as fobj:
        buf = fobj.read()
        data = np.array(struct.unpack("<128000000f", buf[4 : 4 + 4 * nvecs * ndims])).reshape((nvecs, ndims))
        dd = dict(zip(range(nvecs), data))
    
    table = vec_to_table(dd)
    uri = "vec_data.lance"
    sift1m = lance.write_dataset(table, uri, max_rows_per_group=8192, max_rows_per_file=1024*1024)
  7. 7构建向量索引

    对 vector 列建 IVF_PQ 索引,num_partitions 对应 IVF,num_sub_vectors 对应 PQ。

    sift1m.create_index("vector",
                        index_type="IVF_PQ",
                        num_partitions=256,  # IVF
                        num_sub_vectors=16)  # PQ
  8. 8执行相似性搜索

    用 DuckDB 从数据集中抽样 100 个查询向量,作为后续搜索的输入。

    import duckdb
    import numpy as np
    
    sample = duckdb.query("SELECT vector FROM dataset USING SAMPLE 100").to_df()
    query_vectors = np.array([np.array(x) for x in sample.vector])

关键配置

配置项必填说明示例
max_rows_per_group否写入时每个 group 的最大行数,影响分块粒度8192
max_rows_per_file否写入时每个文件的最大行数,影响文件切分1024*1024
index_type是向量索引类型,如 IVF_PQIVF_PQ
num_partitions否IVF 索引的分区数量256
num_sub_vectors否PQ 量化使用的子向量数量16

如何确认成功

执行 lance.dataset("/tmp/test.lance") 返回 pyarrow Dataset 对象,且可 to_pandas() 打印出数据。

常见问题

Q:DuckDB 查询时出现 segfault 怎么办?

A:README 提示:确认已安装 duckdb v0.7+,旧版本可能导致段错误。

Q:预览版和正式版有什么区别?

A:预览版发布更频繁,包含最新功能和修复,与正式版测试级别相同,并保证至少 6 个月内可下载。

Q:想固定某个版本该装哪个?

A:README 建议需要固定版本时优先选择稳定版(正式 release),而不是预览版。

Q:向量搜索示例需要多大内存?

A:README 用 100 万条 128 维向量(nvecs=1000000、ndims=128),数据量较大,请确保机器内存充足。

注意事项

  • README 中的所有示例路径(如 /tmp/test.lance、vec_data.lance、sift/sift_base.fvecs)均为示例,实际使用时替换为自己环境中的路径。
  • 预览版通过 --extra-index-url https://pypi.fury.io/lance-format 安装,正式版直接 pip install pylance。
  • Lance 兼容 Pandas、DuckDB、Polars、PyArrow、Ray、Spark 等工具,更多集成仍在扩展中。

核心亮点

  • 随机访问性能提升高达 100 倍,显著加速数据加载和采样
  • 内置向量索引,原生支持相似性搜索和 ANN 检索
  • 数据版本控制,支持时间旅行和回滚,便于实验管理

不足之处

  • 生态相对年轻,社区和文档有待完善
  • 与 Parquet 等成熟格式相比,工具链和兼容性仍需时间积累

适用场景

  • 大规模多模态数据集(如图像、视频、文本)的训练前处理
  • 需要快速随机访问和采样的数据增强与探索
  • 构建支持向量检索的 RAG 或推荐系统数据管道

替代项目

Apache Parquet、HDF5、WebDataset

项目介绍

lance 是基础设施领域的开源项目,由 lance-format 开发,2022 年首次发布。

在全站 13,090 个收录项目中,它的 GitHub 星标数(7,106)位列前 7%,在基础设施分类的 1,132 个项目里位列前 10%。

近 41 天,它的 GitHub 星标从 6,933 增加到 7,106,净增 173。

项目目前处于活跃维护状态,最近一次代码更新于 2026-09-22。Apache-2.0许可证,完全免费,可自行部署使用。从国内网络环境看,可直接访问。

它主要面向的使用场景是:大规模多模态数据集(如图像、视频、文本)的训练前处理。同类可对比的替代方案包括 Apache Parquet、HDF5、WebDataset。

上一篇:feast

下一篇:kserve

同类项目推荐

freebuff-proxy 开源

聚合多账号,一键接入 OpenAI 兼容 API,轻松管理会话。

Multi-account OpenAI-compatible gateway for coding models. Pooled keys, session life···

★ 213 2026-08-20
microduck 开源

用 Rust 造一只会走路的桌面小鸭,快速上手双足机器人。

A Tiny biped duck robot

★ 8684 2026-09-10
soperator 开源

用 Kubernetes 原生方式运行 Slurm,简化 HPC 集群管理。

Run Slurm in Kubernetes

★ 439 2026-08-10
ollama 开源

一条命令本地跑起大模型,免费、私密、不卡顿

Get up and running with Kimi, GLM, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other···

★ 181484 2026-08-09