Datasets documentation
الاستخدام مع Spark
الاستخدام مع Spark
هذا المستند مقدمة سريعة لاستخدام 🤗 Datasets مع Spark، مع تركيز خاص على كيفية تحميل Spark DataFrame في كائن Dataset.
من هناك، يمكنك الوصول السريع إلى أي عنصر واستخدامه كمحمّل بيانات لتدريب النماذج.
التحميل من Spark
كائن Dataset هو غلاف لجدول Arrow، مما يتيح قراءة سريعة من المصفوفات في مجموعة البيانات إلى متجهات PyTorch وTensorFlow وJAX. يتم تعيين جدول Arrow في الذاكرة من القرص، مما يتيح تحميل مجموعات بيانات أكبر من ذاكرة الوصول العشوائي المتاحة لديك.
يمكنك الحصول على Dataset من إطار بيانات Spark باستخدام Dataset.from_spark():
>>> from datasets import Dataset
>>> df = spark.createDataFrame(
... data=[[1, "Elia"], [2, "Teo"], [3, "Fang"]],
... columns=["id", "name"],
... )
>>> ds = Dataset.from_spark(df)تكتب عمّال Spark مجموعة البيانات على القرص في مجلد مؤقت بصيغة ملفات Arrow، وتُحمَّل Dataset من هناك.
بديلًا عن ذلك، يمكنك تجاوز الماديّة (materialization) باستخدام IterableDataset.from_spark()، الذي يعيد IterableDataset:
>>> from datasets import IterableDataset
>>> df = spark.createDataFrame(
... data=[[1, "Elia"], [2, "Teo"], [3, "Fang"]],
... columns=["id", "name"],
... )
>>> ds = IterableDataset.from_spark(df)
>>> print(next(iter(ds)))
{"id": 1, "name": "Elia"}التخزين المؤقت
عند استخدام Dataset.from_spark()، يتم تخزين Dataset الناتج مؤقتًا؛ فإذا استدعيت Dataset.from_spark() عدة مرات على نفس DataFrame، فلن يُعاد تشغيل مهمة Spark التي تكتب مجموعة البيانات كملفات Arrow على القرص.
يمكنك تحديد موقع ذاكرة التخزين المؤقت عن طريق تمرير cache_dir= إلى Dataset.from_spark().
تأكد من استخدام قرص متاح لكل من عمّالك وجهازك الحالي (المشغّل).
في جلسة مختلفة، لا يحمل إطار بيانات Spark الجزء الهندي الدلالي نفسه، وسيُعيد تشغيل مهمة Spark وتخزينها في ذاكرة مؤقتة جديدة.
أنواع الميزات
إذا كان مجموعة بياناتك تتكون من صور أو بيانات صوتية أو مصفوفات ذات أبعاد N، يمكنك تحديد الحجة features= في Dataset.from_spark() (أو IterableDataset.from_spark()):
>>> from datasets import Dataset, Features, Image, Value
>>> data = [(0, open("image.png", "rb").read())]
>>> df = spark.createDataFrame(data, "idx: int, image: binary")
>>> # Also works if you have arrays
>>> # data = [(0, np.zeros(shape=(32, 32, 3), dtype=np.int32).tolist())]
>>> # df = spark.createDataFrame(data, "idx: int, image: array<array<array<int>>>")
>>> features = Features({"idx": Value("int64"), "image": Image()})
>>> dataset = Dataset.from_spark(df, features=features)
>>> dataset[0]
{'idx': 0, 'image': <PIL.PngImagePlugin.PngImageFile image mode=RGB size=32x32>}يمكنك الاطلاع على وثائق الميزات لمعرفة جميع أنواع الميزات المتاحة.
Update on GitHub