資料集檢視器文件

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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.