数据集查看器文档

Polars

Hugging Face's logo
加入 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    ┆ 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     │
└──────────┴───────┴─────────────────┘

惰性 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()
< > 在 GitHub 上更新