زمان تخمینی مطالعه:‌ 5 دقیقه

تحول RDD (RDD Transformations)


RDD Transformations اشاره گرهایی به RDD جدید را برمی گرداند ( Return میکند ) و اجازه می دهد بین RDD ها وابستگی هایی ایجاد کنیم. هر RDD در زنجیر وابستگی ( رشته وابستگی ) برای محاسبه Data خودش یک تابع دارد و برای Parent خود یک اشاره گر ( Pointer ) دارد.

اسپارک تنبله ، به این معنی که هیچ چیز اجرا نمی شود مگر این که شما یک Transformation یا Action را صدا کنید.که در این صورت یک Trigger Job ساخته و اجرا می شود. به قطعه کد زیر برای مثال word-count دقت کنید.

بنابراین، Transformations RDD یک مجموعه Data نیست اما یک مرحله دربرنامه است ( شاید تنها مرحله ) که به اسپارک می گوید که چگونه Data را دریافت کند و با آن چکار کند.

در زیر لیست Transformations RDD ها را میبینید.

1. Map(func)

یک دیتاست توزیع شده جدید را برمی گرداند، به وسیله پاس دادن هر المنت منبع از طریق تابع func

2. Filter(func)

یک دیتاست جدید به وسیله انتخاب المنت های منبع وقتی که خروجی func ، True باشد، بر می گرداند.

3. FlatMap(func)

شبیه به Map است اما هر آیتم ورودی می تواند نگاشت ( Map ) شود به 0 یا چند آیتم خروجی (func می تواند یک seq برگرداند به جای یک آیتم تکی )

4. MapPartitions(func)

شبیه به Map است اما روی هر بلاک RDD به صورت جداگانه اجرا می شود.

برای همین نوع func باید به شکل=> Iteraator<u> Iterator <T> باشد وقتی روی RDD نوع T اجرا می شود.

5. Map Partitioned with Index(func)

شبیه به Map Partitions ولی یک داده عددی به عنوان index پارتیشن ( بلاک ) هم می گیرد.

برای همین نوع func باید به شکل (Int,Interator<T>)=> Interator<u> باشد وقتی روی RDD نوع T اجرا می شود.

6. ( With Replacement,Fraction,Seed ) Sample :

نمونه برداری از بخشی از داده، "با" یا "بی" جایگیزین ( Replacement )، با استفاده از Seed تولیدکننده اعداد تصادفی.

7. Union ( Other Dataset ) :

یک دیتاست جدید که شامل اجتماع ( پیوند ) دیتاست های آرگومان های منبع ( ورودی ) است، برمی گرداند.

8. Intersection ( Other Dataset ) :

یک دیتاست جدید که شامل اشتراک دیتاست های آرگومان های منبع ( ورودی ) است، برمی گرداند.

9. Distinct ( [ numTasks ] ) :

یک دیتاست جدید که از آرگومان های ورودی به صورت متمایز ( غیر تکرار ) بر می گرداند.

10. Reduce By Key ( fund,[numTasks] ) :

وقتی روی زوج دیتاست ( k,V ) اجرا شود، دیتاستی از زوج ( K, V ) برمی گرداند به طوری که مقدار هر Key جمع شماری شده (Aggregated ) از تابع Reduce گرفته شده در پارامتر اول ( Func ) که باید ؟ از (v,v)=>v باشد،شبیه groupByKey تعداد Reduce Task ها از طریق پارامتر دوم که اختیاری است تغییر می کند.

11. groupByKey( [ numTasks ] ) :

وقتی روی زوج دیتاست ( k,V ) اجرا شود، دیتاستی از زوج ( K,Iterable ) برمی گرداند.

نکته : اگر شما به منظورعملیات جمعی روی هر key از group استفاده می کنید ( مثل Sum یا Average)، بهتر است از Reduce By Key یا Aggregated By Key استفاده کنید چون کارایی بالاتری دارد.

12. Aggregated By Key ( ZeroValue ) ( SeqOP,ComOP, [ numTasks ] ) :

وقتی روی زوج دیتاست ( k,V ) اجرا شود،خروجی دیتاستی از زوج ( K, U ) است که مقدار هر کلید ( Key ) عملیات جمعی روی Combine Function و مقدار "صفر" ( Zero ) مطلق است.

این اجازه داده می شود که نوع مقدار جمعی بتواند متفاوت باشد از نوع متغیر ورودی، ( بدون اختصاص فضای اضافی ). مثل groupByKey ، تعداد Reduce Task ها از طریق پارامتر دوم که اختیاری است تغییر می کند.

13. Sort By Key ( [ ascending ],[ numTasks ] ) :

وقتی روی دیتاست زوج ( k , v ) که k به صورت ordered ( ترتیبی ) پیاده شده است، اجرا می شود،خروجی دیتاستی از ( k , v ) است که با key، sort ( مرتب ) شده است ( یا asc یا desc ) که به وسیله پارامتر ascending boolean، مشخص می شود.

14. Cogroup ( OtherDataset,[ numTasks ] ) :

وقتی روی دیتاست های ( k , v ) و ( k , w ) اجرا شود، خروجی دیتاستی از ( k , ( Iterable<v> , Iterable<w> ) ) است.

این عملیات گاهی "group with" هم گفته می شود.

15. Join ( OtherDataset,[ numTasks ] ) :

وقتی روی دیتاست های ( k , v ) و ( k , w ) اجرا شود، خروجی دیتاستی از ( k, (v,w) ) است با تمام مقادیر برای هر key.

Outer join ها هم از طریق leftouterjoin و rightouterjoin و fullouterjoin پشتیبانی می شوند.

16. Cartesian ( OtherDataset ) :

وقتی روی دیتاست نوع T و U اجرا می شود، جواب دیتاستی از ( T,U ) است.

17. Pipe ( Command , [ envVars ] ) :

هر پارتیشن RDD رو از طریق کامند shell، Pipe (موازی) می کند مثلا با Perl یا bash اسکریپت. المنت های RDD برای پردازش های stdin نوشته می شوند و خط های خروجی Stdout به عنوان رشته های RDD برمی گردند.

18. Coalesce ( numPartitions ) :

تعداد پارتیشن های RDD رابه اندازه numPartitions کاهش می دهد. بعد از filter down کردن یک دیتاست بزرگ اجرا شدن این دستور خیلی عملکرد را بهبود می بخشد.

19. RePartition ( numPartitions ) :

داده ی RDD ها را به صورت رندوم تغییر می دهد برای ساخت تعداد بیش تر یا کمتر یا بالانس کردن پارتیشن ها.

این عملیات معمولا کل داده روی شبکه را بهم می ریزد..

20. RePartition And Sort Within Partitions ( Partitioner ) :

با توجه به partitioner گرفته شده دوباره پارتیشن بندی می کند و با هر پارتیشن جدید key های آن را sort می کند.

این کار خیلی بهتر ازاین است که اول repartition کنیم و بعد sort چون که این sort را وقتی انجام می دهد که تمام data ها بهم ریخته هستند.


لطفا در راستای هرچه بهتر شدن کیفیت مطالب نظر خود را در رابطه با این سرفصل برای ما ارسال نمایید.