Hub documentation
تدفق مجموعات البيانات
تدفق مجموعات البيانات
المكتبات المتكاملة
If a dataset on the Hub is compatible with a supported library that allows streaming from Hugging Face, streaming the dataset can be done in just a few lines. For information on accessing the dataset, you can click on the “Use this dataset” button on the dataset page to see how to do so. For example, knkarthick/samsum shows how to do so with datasets below.


استخدام مكتبة عميل Hugging Face
يمكنك استخدام مكتبة huggingface_hub لإنشاء الملفات وحذفها والوصول إليها من المستودعات. على سبيل المثال، لبث مجموعة بيانات allenai/c4 بلغة بايثون، ما عليك سوى تثبيت المكتبة (ننصح باستخدام أحدث إصدار) وتشغيل الكود التالي.
pip install -U huggingface_hub
from huggingface_hub import hffs
repo_id = "allenai/c4"
path_in_repo = "en/c4-train.00000-of-01024.json.gz"
# Stream the file
with hffs.open(f"datasets/{repo_id}/{path_in_repo}", "r", compression="gzip") as f:
print(f.readline()) # read only the first line
# {"text":"Beginners BBQ Class Taking Place in Missoula!...}راجع توثيق HfFileSystem لمزيد من المعلومات.
يمكنك أيضًا دمج هذا في مكتبتك الخاصة! على سبيل المثال، يمكنك بث مجموعة بيانات بصيغة CSV بسرعة باستخدام Pandas على دفعات.
import pandas as pd
repo_id = "YOUR_REPO_ID"
path_in_repo = "data.csv"
batch_size = 5
# Stream the file
with hffs.open(f"datasets/{repo_id}/{path_in_repo}") as f:
for df in pd.read_csv(f, iterator=True, chunksize=batch_size): # read 5 lines at a time
print(len(df)) # 5يُعدّ البثّ (Streaming) مفيداً بشكل خاص لقراءة الملفات الكبيرة على Hugging Face تدريجياً أو قراءة جزء صغير منها فقط.
فعلى سبيل المثال، يمكن لـtarfile التكرار على ملفات أرشيفات TAR، ويمكن لـzipfile قراءة الملفات من أرشيفات ZIP، ويمكن لـpyarrow الوصول إلى مجموعات الصفوف في ملفات Parquet.
يتوفر تنفيذ مكافئ لنظام الملفات بلغة Rust في OpenDAL.
استخدام cURL
بما أن جميع الملفات على Hub متاحة عبر HTTP، يمكنك بث الملفات باستخدام cURL:
>>> curl -L https://huggingface.co/datasets/fka/awesome-chatgpt-prompts/resolve/main/prompts.csv | head -n 5
"act","prompt"
"An Ethereum Developer","Imagine you are an experienced Ethereum developer tasked with creating...
"SEO Prompt","Using WebPilot, create an outline for an article that will be 2,000 words on the ...
"Linux Terminal","I want you to act as a linux terminal. I will type commands and you will repl...
"English Translator and Improver","I want you to act as an English translator, spelling correct...استخدم طلبات المدى (range requests) للوصول إلى جزء محدد من ملف:
>>> curl -r 40-88 -L https://huggingface.co/datasets/fka/awesome-chatgpt-prompts/resolve/main/prompts.csv
Imagine you are an experienced Ethereum developerبث من المستودعات الخاصة باستخدام رمز وصول:
>>> export HF_TOKEN=hf_xxx
>>> curl -H "Authorization: Bearer $HF_TOKEN" -L https://huggingface.co/...بث Parquet
يُعدّ Parquet تنسيقًا ممتازًا لمجموعات بيانات الذكاء الاصطناعي. فهو يوفر ضغطًا جيدًا، وهيكلًا أعمديًا للمعالجة والإسقاطات بكفاءة، وبيانات وصفية متعددة المستويات للترشيح السريع، وهو مناسب لمجموعات البيانات بجميع أحجامها.
تُقسَّم ملفات Parquet إلى مجموعات صفوف، غالبًا ما يبلغ حجم كل منها حوالي 100 ميغابايت. وهذا يتيح لمحمّلات البيانات وإطارات معالجة البيانات بث البيانات تدريجيًا، من خلال التكرار على مجموعات الصفوف.
تحتوي مجموعات الصفوف على أعمدة فردية، والتي تُقسَّم بدورها إلى صفحات. والصفحات هي الكتلة المضغوطة بحجم يقارب 1 ميغابايت والتي تحتوي على البيانات الفعلية.

تدفّق مجموعات الصفوف
استخدم PyArrow لبث مجموعات الصفوف من ملفات Parquet على Hugging Face:
import pyarrow.parquet as pq
repo_id = "HuggingFaceFW/finewiki"
path_in_repo = "data/enwiki/000_00000.parquet"
# Stream the Parquet file row group per row group
with pq.ParquetFile(f"hf://datasets/{repo_id}/{path_in_repo}") as pf:
for row_group_idx in range(pf.num_row_groups):
row_group_table = pf.read_row_group(row_group_idx)
df = row_group_table.to_pandas()يدعم PyArrow مسارات
hf://بشكل افتراضي ويستخدمHfFileSystemتلقائياً
يمكنك العثور على مزيد من المعلومات في توثيق PyArrow.
الوصول العشوائي الفعّال
تُقسَّم مجموعات الصفوف بدورها إلى أعمدة، وتُقسَّم الأعمدة إلى صفحات. وغالبًا ما تكون الصفحات بحجم يقارب 1 ميغابايت، وهي أصغر وحدة بيانات في Parquet، إذ يُطبَّق الضغط على هذا المستوى. يتيح الوصول إلى الصفوف تحميل صفوف محددة دون الحاجة إلى تحميل مجموعة صفوف كاملة، وهو أمر ممكن إذا كان ملف Parquet يحتوي على فهرس صفحات. ومع ذلك، لا تدعم جميع أطر العمل الخاصة بـ Parquet القراءة على مستوى الصفحات. فـ PyArrow على سبيل المثال لا يدعم ذلك، بينما يدعم ذلك parquet في Rust:
use std::sync::Arc;
use object_store::path::Path;
use object_store_opendal::OpendalStore;
use opendal::services::Huggingface;
use opendal::Operator;
use parquet::arrow::async_reader::ParquetObjectReader;
use parquet::arrow::ParquetRecordBatchStreamBuilder;
use futures::TryStreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let repo_id = "HuggingFaceFW/finewiki";
let path_in_repo = Path::from("data/enwiki/000_00000.parquet");
let offset = 0;
let limit = 10;
let builder = Huggingface::default().repo_type("dataset").repo_id(repo_id);
let operator = Operator::new(builder)?.finish();
let store = Arc::new(OpendalStore::new(operator));
let reader = ParquetObjectReader::new(store, path_in_repo.clone());
let batch_stream =
ParquetRecordBatchStreamBuilder::new(reader).await?
.with_offset(offset as usize)
.with_limit(limit as usize)
.build()?;
let results = batch_stream.try_collect::<Vec<_>>().await?;
println!("Read {} batches", results.len());
Ok(())
}في Rust نستخدم خدمة
Huggingfaceمن OpenDAL وهي مكافئة لـHfFileSystemفي python
مرّر write_page_index=True في PyArrow لتضمين فهرس الصفحات الذي يتيح وصولاً عشوائياً فعالاً.
يضيف هذا بشكل ملحوظ “offset_index_offset” و “offset_index_length” إلى أعمدة Parquet التي يمكنك رؤيتها في عارض بيانات Parquet على Hugging Face.
كما تُسرّع فهارس الصفحات عارض مجموعات بيانات Hugging Face وتتيح له عرض البيانات دون حد لحجم مجموعة الصفوف.