数据集查看器文档

Polars

Hugging Face's logo
加入 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    ┆ 389561206.521203     │
│ Leo       ┆ 354871180.067377     │
│ Aquarius  ┆ 327231152.113682     │
│ Virgo     ┆ 361891117.198209     │
│ Capricorn ┆ 318251102.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 ┆ 496871191.417212     │
│ Leo      ┆ 538111183.878222     │
│ Cancer   ┆ 650481158.969161     │
│ Gemini   ┆ 519851156.069308     │
│ Virgo    ┆ 603991140.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()
< > 在 GitHub 上更新