Parquet Format Guide
用於大規模訓練資料集的欄式儲存格式
Training DataSpecification
Apache Parquet 是一種欄式儲存檔案格式,專為大資料處理框架中的高效資料儲存和檢索而設計。最初由 Twitter 和 Cloudera 開發,並於 2013 年透過 Apache Software Foundation 開源,Parquet 按欄而非按行儲存資料,與 CSV 或 JSONL 等行導向格式相比,實現了顯著更好的壓縮比和更快的分析查詢。它已成為 Hugging Face Hub 和企業資料湖中大規模資料集儲存的標準格式。
Parquet 檔案組織為行群組(row groups),每個行群組包含儲存單一欄位資料的欄區塊(column chunks)。每個欄區塊進一步劃分為頁面(pages)——可以單獨壓縮和編碼的最小儲存單位。這種層次結構實現了高效的部分讀取:當查詢僅需要具有數百欄位資料集中的幾個欄位時,Parquet 僅讀取相關的欄區塊,跳過所有不相關的資料。儲存在中繼資料中的欄級統計資訊(最小值、最大值、空值計數)支援謂詞 下推,當統計資訊表明行群組不可能包含匹配的行時,可以跳過整個行群組。
Parquet 支援多種壓縮編碼器,包括 Snappy(快速、中等壓縮)、Zstandard(優秀的壓縮比和良好的速度)、Gzip(廣泛相容)、LZ4(最低延遲)和 Brotli(最高壓縮)。它支援複雜的巢狀資料型別,包括結構體、列表和映射,使用 Dremel 編碼方案高效處理重複和可選欄位。該格式的自描述架構儲存在檔案頁腳中,確保讀取器可以在沒有外部架構定義的情況下解讀資料。
When to Use Parquet
Parquet 是儲存受益於壓縮和高效欄式存取的大型訓練資料集(數百 MB 到 TB)的最佳格式。在 Hugging Face Hub 上,Parquet 是 datasets 程式庫的預設格式,支援資料集串流(在不下載整個檔案的情況下即時載入資料)和伺服器端篩選等功能。如果您正在發布資料集供社群使用或處理超出可用 RAM 的資料集,Parquet 應該是您的儲存格式。
當您的資料集很大且需要高效儲存、快速欄級存取,或與 Apache Spark、DuckDB、Polars 或 BigQuery 等大資料工具整合時,選擇 Parquet 而非 JSONL。佔用 10 GB 磁碟空間的 JSONL 資料集可能在 Parquet 中壓縮到 2-3 GB,同時還提供更快的常見操作讀取存取。對於具有複雜型別、Unicode 文字或超過幾百 MB 資料的任何資料集,選擇 Parquet 而非 CSV。
當您需要逐行串流到期望 JSONL 輸入的訓練框架中(在最後的訓練步驟中將 Parquet 轉換為 JSONL)、當您需要手動檢查或編輯個別記錄(Parquet 是二進位的,非人類可讀)、或當您的資料集非常小以至於 Parquet 格式的開銷超過壓縮的好處時,Parquet 不太適合。
Schema / Structure
Parquet File Structure:
┌──────────────────────────────────────┐
│ Row Group 0 │
│ ├── Column Chunk: "text" │
│ │ ├── Page 0 (data + encoding) │
│ │ └── Page 1 (data + encoding) │
│ ├── Column Chunk: "label" │
│ │ └── Page 0 (data + encoding) │
│ └── Column Chunk: "metadata" │
│ └── Page 0 (data + encoding) │
├──────────────────────────────────────┤
│ Row Group 1 │
│ ├── Column Chunk: "text" │
│ ├── Column Chunk: "label" │
│ └── Column Chunk: "metadata" │
├──────────────────────────────────────┤
│ Footer │
│ ├── File Metadata │
│ │ ├── Schema (column names/types)│
│ │ ├── Row group metadata │
│ │ └── Column statistics │
│ └── Footer length (4 bytes) │
│ Magic number: "PAR1" (4 bytes) │
└──────────────────────────────────────┘Example Data
import pyarrow as pa
import pyarrow.parquet as pq
import pandas as pd
# Create a training dataset and save as Parquet
data = {
"text": [
"The product quality exceeded my expectations",
"Terrible customer service, waited 3 hours",
"Average experience, nothing special",
],
"label": ["positive", "negative", "neutral"],
"confidence": [0.95, 0.88, 0.72],
}
table = pa.Table.from_pydict(data)
pq.write_table(table, "training_data.parquet", compression="zstd")
# Read specific columns (efficient columnar access)
df = pq.read_table("training_data.parquet", columns=["text", "label"]).to_pandas()
print(df.head())
# Stream large Parquet files with Hugging Face datasets
from datasets import load_dataset
ds = load_dataset("parquet", data_files="training_data.parquet", streaming=True)
for example in ds["train"]:
print(example["text"], example["label"])Ertas Support
Ertas Data Suite 支援 Parquet 匯入和匯出,以高效處理大規模訓練資料集。您可以從資料湖和資料倉儲匯入 Parquet 檔案、套用 PII 編輯和資料轉換,並以 Parquet(用於儲存效率)或 JSONL(用於訓練框架相容性)匯出已處理的資料集。資料譜系系統在行群組級別追蹤轉換,即使在格式轉換過程中也維護來源記錄。
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.