Lance列格式Python包装器
项目描述
Python绑定Lance数据格式
:warning: 正在积极开发
Lance是一种用于数据科学和机器学习的新列式数据格式
为什么你应该使用Lance
- 在点查询和常见于DS/ML的嵌套数据结构方面,Lance的速度比Parquet快一个数量级
- 包含快速向量索引,提供亚毫秒级最近邻搜索性能
- 自动版本控制,支持溯源和时间旅行,实现完全可重复性
- 已与duckdb/pandas/polars集成。仅需两行代码即可轻松转换为/from parquet
快速开始
安装
pip install pylance
请确保您拥有最新版本的pandas(1.5+)、pyarrow(10.0+)和DuckDB(0.7.0+)
转换为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")
读取Lance数据
dataset = lance.dataset("/tmp/test.lance")
assert isinstance(dataset, pa.dataset.Dataset)
Pandas
df = dataset.to_table().to_pandas()
DuckDB
import duckdb
# If this segfaults, make sure you have duckdb v0.7+ installed
duckdb.query("SELECT * FROM dataset LIMIT 10").to_df()
向量搜索
下载sift1m子集
wget ftp://ftp.irisa.fr/local/texmex/corpus/sift.tar.gz
tar -xzf sift.tar.gz
将其转换为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)
构建索引
sift1m.create_index("vector",
index_type="IVF_PQ",
num_partitions=256, # IVF
num_sub_vectors=16) # PQ
搜索数据集
# Get top 10 similar vectors
import duckdb
dataset = lance.dataset(uri)
# Sample 100 query vectors. If this segfaults, make sure you have duckdb v0.7+ installed
sample = duckdb.query("SELECT vector FROM dataset USING SAMPLE 100").to_df()
query_vectors = np.array([np.array(x) for x in sample.vector])
# Get nearest neighbors for all of them
rs = [dataset.to_table(nearest={"column": "vector", "k": 10, "q": q})
for q in query_vectors]
*更多距离度量、HNSW和分布式支持正在规划中
Python包详细信息
从PyPI安装:pip install pylance
# >=0.3.0是新的基于Rust的实现
通过:import lance
导入
Python集成是通过pyo3和自定义Python代码完成的
- 我们使用Rust为Dataset/Scanner/RecordBatchReader创建包装类,这些类暴露给Python。
- 然后,它们被用于LanceDataset / LanceScanner实现,这些实现扩展了pyarrow Dataset/Scanner以兼容DuckDB。
- 数据通过Arrow C数据接口传递
动机
我们为什么需要一个新的数据科学和机器学习格式?
1. 可重复性是必需的
版本控制和实验支持应内置到数据集中,而不是需要多个工具。
它还应该是高效的,不需要每次创建新版本时都进行昂贵的复制。
我们称这为Lance中的“零拷贝版本控制”。它使得版本控制数据变得容易,而不会增加存储成本。
2. 云存储现在是默认的
对于数据科学和机器学习,远程对象存储现在是默认的,而云的性能特性是根本不同的。
Lance格式针对云原生进行了优化。使用Lance比Parquet快一个数量级,特别是对于ML数据,常见的操作如过滤后取数据。
3. 向量必须是第一公民,而不是一个单独的东西
大多数合理的规模工作流程不应需要额外的复杂性和成本,仅为了计算向量相似性就需要专门的数据库。Lance将优化的向量索引集成到列式格式中,因此不需要额外的基础设施来获得低延迟的top-K相似度搜索。
4. 开放标准是必需的
DS/ML生态系统非常丰富,数据必须在不同的语言、工具和环境之间轻松访问。Lance将Apache Arrow集成作为其主接口,这意味着转换到/from只需要两行代码,转换后您的代码不需要更改,而且没有任何东西被锁定以强制您为供应商的计算付费。我们需要开源,而不是假开源。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
pylance-0.18.2-cp39-abi3-win_amd64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 72796676d7647ba9f6e86531daf67880f5e69ba8f842e237ad0c1ca419c6378c |
|
MD5 | 0cf8d28b4db6c4b7042a0d02d51ea738 |
|
BLAKE2b-256 | 811b9dcb3d95fd08b2a2ce7f972a3dce25551b29a9fd0e1ee22e39d8bec36b3e |
pylance-0.18.2-cp39-abi3-manylinux_2_28_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a913920f591d8404c46c74e3911fe0c29d47b923b9c3c7e521d3354c1663d812 |
|
MD5 | a86708e3aa38b434390ace5df04fb647 |
|
BLAKE2b-256 | 0540648f74da0449699b40792b7b9d6db8aedc80fa4e25c61e1f75a8299ec8c5 |
pylance-0.18.2-cp39-abi3-manylinux_2_24_aarch64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f37fb7ad0e53076c731014c210a45919f3b2620c967e2f62cf8b7c26fdc9aace |
|
MD5 | 81c9180fc2c9b04d7093277576903a85 |
|
BLAKE2b-256 | 05c083519992d4a56989fc37fa4baf00ba8c5c8f3bea0cc83a85359751572d64 |
pylance-0.18.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 89dcf2dadee940ea86ac0b3bf7ba81c68e9774a449d8de206bc60cdc8804b853 |
|
MD5 | 45718fed2bddd5b99bbe01f302384096 |
|
BLAKE2b-256 | 0a1f4e6df8eba3c9d78bea8c0713e07ae500d837247d9697c0612720d7f048c7 |
pylance-0.18.2-cp39-abi3-macosx_11_0_arm64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c4c4049eb6a6075cef721a20dd28ccba6d89b66f13e8d20ef65a284ae1c02e30 |
|
MD5 | f51c132bc4dc3b1a29d30889869ddbdb |
|
BLAKE2b-256 | da9fd8f6ed331d6d57b53616bdce1d88efe724335663ee3b6337f1412b104e42 |
pylance-0.18.2-cp39-abi3-macosx_10_15_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 017422b058724dfbe8426c1ac42f0ede77324f3783e177cb4239dc034758b50b |
|
MD5 | 7caaf12c23eec25942811fda1d7434c1 |
|
BLAKE2b-256 | 250a16ae3434c8747028b2adc14cf9e15982005168b173ffa7f181e62af78537 |