مجموعه داده های انعطاف پذیر (Resilient Distributed Datasets) یک مجموعه داده غیر قابل تغییر و قابل پارتیشن شدنی (بخش شدنی بر روی سرورها) است. بنابراین زمانی که RDD ساخته شد، دیگر نمی توان آن را تغییر داد ولی برخی تابع های اسپارک هستند که بر روی RDD اعمال شده و یک نسخه تازه تازه از روی RDD می سازند.

تابع parallelize

این تابع در زبان اسکالا از روی یک Collection مانند List و در پایتون نیز از روی نوع های داده ای مانند لیست و تاپل و یا دیکشنری می تواند یک RDD بسازد. در کدها و شکل های زیر در هر دو پوسته اسکالا و پایتون چگونگی ساخت RDD از روی لیست های اسکالا و پایتون را نشان داده ایم. همچنین به ترتیب با دستورهای getClass و تابع ()type در پایتون، گونه (نوع) متغیر numbers در هر دو زبان را نشان داده ایم. سپس نام متغیر numbers را به تابع parallelize فرستاده شده است که برآیند (نتیجه) آن یک RDD است.

در کدهای بالا یک لیست از شماره یک تا ده هزار را ساخته ایم و سپس به کمک دستور متد ()rdd.firts نخستین آیتم درون RDD را نشان داده ایم. بنابراین تا بدین جا با دو متد ()parallelize برای ساخت RDD و متد ()first برای نمایش نخستین عنصر درون RDD آشنا شده ایم. توجه کنید که متد ()parallelize و دیگر متدهای ساخت RDD، به کمک نمونه ای از کلاس SparkContext در دسترس هستند که با راه اندازی یک پوسته، نام این نمونه، sc است. ولی اگر بخواهید که بیرون از پوسته یک برنامه اسپارک بنویسید، نیاز است تا پیش از هر چیز یک نمونه از کلاس SparkContext را بسازید.

تابع textFile

فایل های متنی ساده که دربرگیرنده چندین و چند خط یا فایل CSV و Excel که به ریخت ستون ها وسطرها یا و فایل های JSON که برگشتی API هستند، همگی می توانند منابعی برای ساخت RDD باشند. اگر گمان کنیم که اسپارک همراه سیستم فایل توزیع شده هدوپ است، پس این فایل ها یا هر فایل دیگری می تواند از HDFS خوانده شود ولی می توان این فایل ها را از روی سیستم فایل نیز برای ساخت RDD بخوانیم. کدهای زیر به ترتیب به زبان اسکالا و پایتون درون مایه یک فایل CSV را از مسیری بر روی سیستم فایل می خواند که در متغیر path نگهداری می شود.

در شکل بالا می توانید ببینید که متغیر fileRDD در زبان های اسکالا و پایتون به ترتیب نمونه ای از کلاس RDD هستند. کدهای زیر الگوی مسیر چگونگی خواندن از HDFS را نشان می دهد. در آغاز //:hdfs پروتکل را نشان می دهد و سپس نشانی یا آدرس و شماره درگاه سرور آمده و در دنباله آن، مسیر رسیدن به فایل نوشته شده است.

تابع wholeTextFiles

با تابع ()textFile می توانیم یک تک فایل متنی را بخوانیم ولی اگر نیاز باشد تا یکباره همه فایل های با پسوند csv را بخوانیم، باید الگوی csv.* را در پایان مسیر به کار ببریم. در کدها و شکل های زیر، چندین فایل با پسوند csv خوانده می شود، بنابراین در این زمان، RDD به گونه دوتایی های Key-Value است که در آن هر Key مسیر یک فایل و Vlaue درون مایه هر فایل کلید خودش است. بنابراین در شکل زیر می بینید که برآیند تابع ()wholeTextFiles به ریخت یک دوتایی [(org.apache.spark.rdd.RDD[(String, String است.

در شکل بالا و در پوسته اسکالا تابع ()first نخستین عنصر درون rdd را برگشت می دهد که یک دوتایی از نام فایل و همه درون مایه آن فایل است. توجه کنید ()rdd.first همه درون مایه را برگشت می دهد ولی در خود پوسته تنها بخشی از آن نشان داده می شود. از سوی دیگر، در پوسته پایتون، چون ()rdd.first یکباره در پوسته همه درون مایه فایل را نشان می دهد، پس به جای آن، اندیس صفر از نخستین عنصر، یعنی نام فایل نشان داده شده است و سپس به کمک اندیس شماره یک و تابع ()split تنها سه خط آغازین نشان داده شده است.توجه کنید که ما از ()fisrt کمک گرفته ایم، پس تنها می توانیم روی نخستین عنصر کار کنیم و نه همه عنصرهای درون RDD

تابع sequenceFile

تابع sequenceFile یک سری از دوتایی های Key-Value را از یک فایل درون سیستم فایل، HDFS و یا از هر سامانه ذخیره سازی پشتیبانی شده از هدوپ می خواند که در این تابع، Key و Value به ترتیب گونه همسان با کلیدها و مقدارهای درون فایل است. سپس این تابع یک RDD به گونه دوتایی ها برگشت می دهد.

ساخت یک فایل Sequence با اسکالا

یک Sequence File، فایلی است که دربرگیرنده دوتایی های Key-Vlaue است که به ویژه در برنامه نویسی هدوپ، ورودی برای چارچوب MapReduce هستند. در کدهای زیر نسخت به کمک تابع parallelize می خواهیم یک لیست از دوتایی ها را به یک فایل Sequence تبدیل کنیم. چون می خواهیم فایلی بسازیم، پس به کمک متد saveAsSequenceFile آن توالی (Sequence) ساخته شده را به روی دیسک می نویسیم. توجه کنید تابع saveAsSequenceFile یک RDD را دریافت می کند که در اینجا این RDD بدست متد parallelize از روی لیستی از دوتایی ها ساخته شده است.

فایل های Sequence، فایل های دودویی هستند و در کدهای بالا، یک دایرکتوری به نام sequence_file نشان داده شده است که درون آن فایل های دودویی ساخته می شوند. تابعی به نام ()count در اسپارک (و جدا از پایتون یا اسکالا) هست که شمار (تعداد) عنصرهای یک RDD را برگشت می دهد. بنابراین چون RDD ساخته شده از یک توالی یا لیستی از سه دوتایی است، پس RDD نیز دارای سه عنصر دوتایی خواهد بود.

خواندن فایل توالی به کمک متد sequenceFile در پایتون بسیار کوتاه است که نخستین کد زیر آن را نشان می دهد ولی برای خواندن در اسکالا نیز است تا شما گونه دوتایی ها را نشان دهید. در دومین کد زیر [Text, Text] که پس از نام تابع sequenceFile، آمده گونه دوتایی ها را Text نشان داده است که این Text به کمک ماژول import org.apache.hadoop.io.Text به برنامه شناسانده شده است.