数据集查看器文档

Polars

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

入门

Polars

Polars 是一个用 Rust 编写的快速 DataFrame 库,以 Arrow 为基础。

💡 了解有关如何在 列出 Parquet 文件 指南中获取数据集 URL 的更多信息。

让我们从获取 barilan/blog_authorship_corpus 数据集的 train 拆分到数据集查看器 API 的 URL 开始

r = requests.get("https://datasets-server.huggingface.co/parquet?dataset=barilan/blog_authorship_corpus")
j = r.json()
urls = [f['url'] for f in j['parquet_files'] if f['split'] == 'train']
urls
['https://huggingface.co/datasets/barilan/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/train/0000.parquet',
 'https://huggingface.co/datasets/barilan/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/train/0001.parquet']

要从单个 Parquet 文件读取,请使用 read_parquet 函数将其读取到 DataFrame 中,然后执行您的查询

import polars as pl

df = (
    pl.read_parquet("https://huggingface.co/datasets/barilan/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/train/0000.parquet")
    .groupby("horoscope")
    .agg(
        [
            pl.count(),
            pl.col("text").str.n_chars().mean().alias("avg_blog_length")
        ]
    )
    .sort("avg_blog_length", descending=True)
    .limit(5)
)
print(df)
shape: (5, 3)
┌───────────┬───────┬─────────────────┐
│ horoscope ┆ count ┆ avg_blog_length │
│ ---       ┆ ---   ┆ ---             │
│ str       ┆ u32   ┆ f64             │
╞═══════════╪═══════╪═════════════════╡
│ Aquarius  ┆ 340621129.218836     │
│ Cancer    ┆ 415091098.366812     │
│ Capricorn ┆ 339611073.2002       │
│ Libra     ┆ 403021072.071833     │
│ Leo       ┆ 405871064.053687     │
└───────────┴───────┴─────────────────┘

要读取多个 Parquet 文件 - 例如,如果数据集已分片 - 您需要使用 concat 函数将文件连接成单个 DataFrame

import polars as pl
df = (
    pl.concat([pl.read_parquet(url) for url in urls])
    .groupby("horoscope")
    .agg(
        [
            pl.count(),
            pl.col("text").str.n_chars().mean().alias("avg_blog_length")
        ]
    )
    .sort("avg_blog_length", descending=True)
    .limit(5)
)
print(df)
shape: (5, 3)
┌─────────────┬───────┬─────────────────┐
│ horoscope   ┆ count ┆ avg_blog_length │
│ ---         ┆ ---   ┆ ---             │
│ str         ┆ u32   ┆ f64             │
╞═════════════╪═══════╪═════════════════╡
│ Aquarius    ┆ 495681125.830677     │
│ Cancer      ┆ 635121097.956087     │
│ Libra       ┆ 603041060.611054     │
│ Capricorn   ┆ 494021059.555261     │
│ Sagittarius ┆ 504311057.458984     │
└─────────────┴───────┴─────────────────┘

惰性 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/barilan/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/train/0000.parquet")
    .groupby("horoscope")
    .agg(
        [
            pl.count(),
            pl.col("text").str.n_chars().mean().alias("avg_blog_length")
        ]
    )
    .sort("avg_blog_length", descending=True)
    .limit(5)
)
df = q.collect()
< > 更新 在 GitHub 上