در این نوشته می خواهیم دسته دیگری از تابع های Transformation را آموزش دهیم که بر روی یک RDD به کار می روند. ولی پیش از آنکه دیگر تابع های Transformation را بگوییم، می خواهیم چگونگی نوشتن یک تابع با نام و فرستادن آن به تابع های از پیش آماده شده در اسپارک را نشان دهیم. 

در کدهای زیر به ترتیب تابع هایی در زبان های اسکالا و پایتون نوشته ایم که هر دو یک ورودی را دریافت می کنند که این ورودی هر خطی از یک فایلی است که به کمک تابع ()textFile از کلاس SparkContext درون یک RDD ریخته شده است. به عبارت دیگر زمانی که نام تابع ()lineLength به عنوان ورودی به تابع ()map از کلاس RDD فرستاده می شود، هر عنصر از RDD که یک خط از فایل است، به عنوان ورودی به تابع ()lineLength فرستاده می شود.

تابع ()cartesian در RDD

این تابع همانند تابع هایی مانند ()union و ()subtract یک RDD را دریافت کرده و سپس عمملیات ضرب دکارتی (Cartesian Product) را بر روی دو RDD اعمال می کند. بنابراین اگر بخواهیم ترکیبی از دوتایی های عنصرهای درون دو RDD را داشته باشیم که در آن نخستین عنصر دوتایی از RDD منبع و دومین عنصر دوتایی از RDD فرستاده شده به تابع است. RDD منبع همانی است که تابع با آن فراخوانی شده است.

تابع ()zip در RDD

تابع ()zip کاربردی نزدیک به ()cartesian دارد با این تفاوت که شمار (تعداد) عنصرهای RDD برگشتی از تابع ()zip با عنصرهای RDD منبع یکسان است. همچنین شمار عنصرهای هر دو RDD نیز باید یکسان باشد.

تابع ()zipWithIndex در RDD

تابع ()zipWithIndex کاربردی همانند ()zip دارد ولی با این تفاوت که دیگر دو RDD در هم ZIP نمی شوند، بلکه هر یک از عنصرهای یک RDD با شماره اندیس خودش ZIP می شود.

تابع ()sample در RDD

تابع ()sample یک زیر مجموعه ساده از یک RDD را برگشت می دهد. در دانش آمار و تحلیل داده ها، نمونه گیری (Sampling) یکی از مؤلفه های مهم تجزیه و تحلیل داده ها است و می تواند تأثیر بسزایی در کیفیت نتایج / یافته های شما داشته باشد. این تابع سه ورودی به نام withReplacement و fraction و seed را دریافت می کند.

withReplacement یک پارامتر بولی (درست / نادرست) است، و نشان می دهد که آیا عنصرها می توانند چندین بار نمونه برداری شوند یا به گفته دیگر هنگام نمونه برداری جایگزین شوند. نمونه برداری با جایگزینی بدان معنی است که، دو مقدار نمونه مستقل از یکدیگر هستند. این بدان معنی است که، اگر دو نمونه را با جایگزین ترسیم کنیم، چیزی که در ترسیم نخست می گیریم تأثیری بر روی ترسیم دوم نمی گذارد، و از این رو همبستگی (Covariance) میان دو نمونه صفر است.

بنابراین، اگر نمونه گیری بدون جایگزینی انجام شود ، این دو نمونه مستقل نیستند. از این رو، این بدان معنی است که آنچه که در گام نخست بدست می آوریم، بر آنچه در گام دوم بدست خواهیم اورد، تأثیر می گذارد و از این رو ، همبستگی میان این دو صفر نیست. ضریب همبستگی ابزاری آماری برای تعیین گونه و درجه رابطه میان دو متغیر است. البته باید بگوییم که ضریب همبستگی تنها ارتباط خطی میان دو متغیر را نشان می دهد.

پارامتر fraction اندازه دلخواه نمونه را به عنوان کسری از اندازه RDD نشان می دهد. کسر باید میان 0 تا 1 باشد. برای نمونه، اگر می خواهید نمونه 5٪ از اندازه RDD باشد، می توانید شماره 0.05 را برای پارامتر fraction برگزینید. پارامتر seed برای ساخت شماره های تصادفی به کار می رود.

تابع های ()repartition و coalesce در RDD

تابع ()repartition شماره صحیح را از ورودی دریافت کرده و سپس یک RDD با پارتیشن هایی برابر با شماره فرستاده شده برگشت می دهد. این پارتیشن برای موازی سازی بسیار سودمند است. چونکه این تابع باعث توزیع دوباره داده ها می شود، پس عملگری هزینه بر است. دو تابع ()repartition و ()coalesce رفتاری نزدیک به یکدیگر دارند ولی تابع ()coalesce برای کاهش شمار پارتیشن های RDD ولی ()repartition برای افزایش شمار پارتیشن ها است. تابع ()coalesce شماره صحیح را از ورودی دریافت کرده و سپس شمار پارتیشن های یک RDD را کاهش می دهد.