数据集查看器文档
Polars
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
Polars
Polars 是一个基于 Arrow 用 Rust 编写的快速 DataFrame 库。
💡 了解更多关于如何在 列出 Parquet 文件 指南中获取数据集 URL。
我们首先从数据集查看器 API 中获取 tasksource/blog_authorship_corpus
数据集的 train
分割的 URL
import requests
r = requests.get("https://datasets-server.huggingface.co/parquet?dataset=tasksource/blog_authorship_corpus")
j = r.json()
urls = [f['url'] for f in j['parquet_files'] if f['split'] == 'train']
urls
['https://huggingface.co/datasets/tasksource/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/default/train/0000.parquet', 'https://huggingface.co/datasets/tasksource/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/default/train/0001.parquet']
要从单个 Parquet 文件读取,请使用 read_parquet
函数将其读取到 DataFrame 中,然后执行您的查询
import polars as pl
df = (
pl.read_parquet("https://huggingface.co/datasets/tasksource/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/default/train/0000.parquet")
.group_by("sign")
.agg(
[
pl.count(),
pl.col("text").str.len_chars().mean().alias("avg_blog_length")
]
)
.sort("avg_blog_length", descending=True)
.limit(5)
)
print(df)
shape: (5, 3)
┌───────────┬───────┬─────────────────┐
│ sign ┆ count ┆ avg_blog_length │
│ --- ┆ --- ┆ --- │
│ str ┆ u32 ┆ f64 │
╞═══════════╪═══════╪═════════════════╡
│ Cancer ┆ 38956 ┆ 1206.521203 │
│ Leo ┆ 35487 ┆ 1180.067377 │
│ Aquarius ┆ 32723 ┆ 1152.113682 │
│ Virgo ┆ 36189 ┆ 1117.198209 │
│ Capricorn ┆ 31825 ┆ 1102.397361 │
└───────────┴───────┴─────────────────┘
要读取多个 Parquet 文件(例如,如果数据集是分片的),您需要使用 concat
函数将文件连接成一个 DataFrame
import polars as pl
df = (
pl.concat([pl.read_parquet(url) for url in urls])
.group_by("sign")
.agg(
[
pl.count(),
pl.col("text").str.len_chars().mean().alias("avg_blog_length")
]
)
.sort("avg_blog_length", descending=True)
.limit(5)
)
print(df)
shape: (5, 3)
┌──────────┬───────┬─────────────────┐
│ sign ┆ count ┆ avg_blog_length │
│ --- ┆ --- ┆ --- │
│ str ┆ u32 ┆ f64 │
╞══════════╪═══════╪═════════════════╡
│ Aquarius ┆ 49687 ┆ 1191.417212 │
│ Leo ┆ 53811 ┆ 1183.878222 │
│ Cancer ┆ 65048 ┆ 1158.969161 │
│ Gemini ┆ 51985 ┆ 1156.069308 │
│ Virgo ┆ 60399 ┆ 1140.958443 │
└──────────┴───────┴─────────────────┘
惰性 API
Polars 提供了一个 惰性 API,对于大型 Parquet 文件,它的性能更高,内存效率也更高。LazyFrame API 会跟踪您想做的事情,并且只会在您准备好时才执行整个查询。这样,惰性 API 不会事先将所有内容加载到 RAM 中,它允许您处理大于可用 RAM 的数据集。
要惰性读取 Parquet 文件,请改用 scan_parquet
函数。然后,使用 collect
函数执行整个查询
import polars as pl
q = (
pl.scan_parquet("https://huggingface.co/datasets/tasksource/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/default/train/0000.parquet")
.group_by("sign")
.agg(
[
pl.count(),
pl.col("text").str.len_chars().mean().alias("avg_blog_length")
]
)
.sort("avg_blog_length", descending=True)
.limit(5)
)
df = q.collect()