در نوشته های پیشین درباره عملگرهای Transaction گفتگو کردیم و اکنون نوبت به دسته دیگر از عملگرهای اسپارک، عملگرهای Action بپردازیم که بر روی RDD ها به کار می روند. علمگرها یا تابع های Transaction یک RDD تازه را برگشت می دهند ولی تابع های Action یک مقدار را برگشت می دهند.

تابع ()collect در RDD

این تابع را پیش از این برای نمایش درون مایه RDD به کار برده ایم. برآیند این تابع، یک آرایه از همه عنصرهای درون RDD است. انجام این متد باید با احتیاط باشد، زیرا داده ها را از همه گره های کارگر (Worker Node) به دارایور برنامه (Driver Program) منتقل می کند. بنابراین برای RDD با حجم بسیار بالای داده ها، شاید این متد درایور برنامه را از کار بی اندازد.

در کد زیر نخست یک لیست از شماره های ۱ تا ۱۰۰۰۰ هزار را می سازیم و سپس به کمک یک تابع بی نام، همه شمارهایی که باقیمانده تقسیم آنها بر شماره ۱۰۰۰ صفر است را پیدا می کنیم. در واقع با متد ()filter که پیش از این گفتیم، تنها به دنبال شماره هایی هستیم که ضریبی از ۱۰۰۰ باشند. بنابراین متغیر filterResult که برآیند  ()collect را نگه می دارد در پایتون از نوع لیست  و در اسکالا آرایه ای از شماره ها و در کل غیر RDD است.

تابع ()count در RDD

این تابع شمار عنصرهای درون یک RDD را برگشت می دهد. در بالا دو RDD ساختیم که به ترتیب برآیند تابع های ()parallelize و ()filter هستند. نخستین RDD که در متغیر rdd است، فهرستی از شماره های ۱ تا ده هزار است، بنابراین برآیند ()count برای این متغیر، شماره 10000 است ولی RDD دیگر که در متغیر filteredRdd است، تنها دارای ۱۰ شماره است، زیرا تنها ۱۰ شماره ضریب ۱۰۰۰ هستند.

تابع ()countByKey در RDD

این تابع شمار هر یک از عنصرهای درون یک RDD را برگشت می دهد. متد ()count شمار همه عنصرها را برگشت می دهد ولی این متد، به ازای هر عنصر، شمار تکرار آن در RDD را برگشت می دهد. در بالا و در filteredRdd هر شماره ضریب ۱۰۰۰ تنها یک بار تکرار شده است. در کد زیر با یک لیست از شماره با تکرار RDD ساخته ایم و سپس شمار هر یک از عنصرهای RDD را بدست آورده ایم.

تابع های ()first و ()take و ()takeOrdered و ()top در RDD

متد ()first تنها نخستین عنصر درون RDD را برگشت می دهد. تابع ()take یک شماره n را دریافت کرده و سپس یک آرایه (در پایتون فهرست list) به اندازه n عنصر از RDD را برگشت می دهد. تابع دیگر ()takeOrdered نیز یک شماره n را دریافت کرده ولی این بار یک آرایه (یا لیست پایتون) از n کوچکترین عنصر را برگشت می دهد که به گفته دیگر، n عنصر از ترتیب صعودی را برگشت می دهد. تابع ()top وارونه ()tackOrdered است بدین گونه که یک شماره n را دریافت کرده و سپس یک آرایه (یا لیستی) از n بزرگترین عنصر درون RDD را برگشت می دهد. به گفته دیگر، n عنصر از ترتیب نزولی را برگشت می دهد. در کد زیر یک RDD از روی فهرستی از شماره ها ساخته ایم و سپس به دنبال هم تابع های گفته شده را فراخوانی کرده ایم.

تابع ()min و ()max در RDD

این دو تابع بسیار آشکار هستند و در یک RDD از شماره تنها یک شماره و آن هم به ترتیب کوچکترین و بزرگترین شماره را برگشت می دهند. ولی اگر RDD فهرستی (یا آرایه ای) از رشته ها باشد، کوچکترین یا بزرگترین رشته برگشتی، بر پایه کد اسکی نخستین کاراکتر درون رشته ها است. در کدهای زیر همه کاراکترها کوچک هستند و کد اسکی g در رشته gd از همه بیشتر و کد اسکی b در تک کاراکتر b نیز از همه کمتر است. در سومین رشته dada کد نخستین کاراکتر، یعنی d کد اسکی بیشتری از b دارد. همچنین کد اسکی حرف های بزرگ مانند A از حرف های کوچکتر مانند a کمتر است. همچنین اگر کاراکتر نخست میان دو یا چند رشته همسان باشد، دومین کاراکتر آن رشته ها بررسی می شوند و همین گونه تا پایان رشته ادامه پیدا می کند.