資料集檢視器文件
Polars
加入 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 ┆ 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 │
└──────────┴───────┴─────────────────┘
惰性 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()