数据集查看器文档
Polars
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
Polars
Polars 是一个用 Rust 编写的快速 DataFrame 库,以 Arrow 为基础。
💡 了解更多关于如何在 列出 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 │
└──────────┴───────┴─────────────────┘
Lazy API
Polars 提供了一个 lazy API,对于大型 Parquet 文件来说,它更高效且内存效率更高。LazyFrame API 会跟踪你想要执行的操作,并且只有在你准备好时才会执行整个查询。这样,lazy 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()