Lance介绍
Lance是一种为机器学习工作流和数据集优化的现代列式数据格式。它具有以下主要特性:
- 高性能随机访问:比Parquet快100倍,同时不牺牲扫描性能
- 向量搜索:毫秒级查找最近邻,可与OLAP查询结合
- 零拷贝自动版本控制:无需额外基础设施即可管理数据版本
- 生态系统集成:兼容Apache Arrow、Pandas、Polars、DuckDB等
Lance特别适合以下场景:
- 构建搜索引擎和特征存储
- 需要高性能IO和shuffle的大规模机器学习训练
- 存储、查询和检查深度嵌套的机器人或大型blob数据(如图像、点云等)
快速上手
安装
使用pip安装预览版:
pip install --pre --extra-index-url https://pypi.fury.io/lancedb/ pylance
转换为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')
# 转换为Lance格式
parquet = pa.dataset.dataset(uri, format='parquet')
lance.write_dataset(parquet, "/tmp/test.lance")
读取Lance数据
dataset = lance.dataset("/tmp/test.lance")
assert isinstance(dataset, pa.dataset.Dataset)
# Pandas
df = dataset.to_table().to_pandas()
df
# DuckDB
import duckdb
duckdb.query("SELECT * FROM dataset LIMIT 10").to_df()
学习资源
- Lance官方文档 - 全面的使用指南和API参考
- Lance博客 - 了解最新动态和使用技巧
- Lance GitHub仓库 - 源码和示例
- Lance深度探索 - 深入理解Lance的设计和实现
- Lance:新的列式数据格式 - 介绍性演示文稿
社区支持
Lance正在积极开发中,欢迎加入社区,共同推动这个强大的机器学习数据格式工具的发展!