آموزش اسپارک: مفاهیم پایه | مهندسی داده

آموزش اسپارک: مفاهیم پایه

۱۳۹۶/۰۱/۱۰
ابزار و کتابخانه ها, چارچوب های پردازش کلان داده

نظر بدهید
1,824 مشاهده

مقدمه

در ادامه مباحث آموزشی اسپارک، در این نوشتار به توضیح مفاهیم پایه اسپارک و چگونگی استفاده از آن درون یک کتابچه پایتون (نوت بوک) خواهیم پرداخت. همانطور که می دانید بسیاری از چارچوب های سنتی پردازش داده برای اجرا درون یک کامپیوتر طراحی شده بودند. اما مجموعه داده های امروزی برای ذخیره شدن روی یک کامپیوتر بیش از حد بزرگ هستند. حتی اگر فرض کنیم که یک مجموعه داده بتواند در یک کامپیوتر هم ذخیره شود (مانند مجموعه داده این آموزش)، پردازش آن با استفاده از چندین کامپیوتر بسیار سریع تر خواهد بود. این دلایل ما را به سمت چارچوبهای پردازش توزیع شده داده هدایت می کند : چارچوب هایی مثل توزیع و تجمیع (Map/Reduce) و اسپارک .

اسپارک دارای پیاده سازی بسیار بهینه و کارآمدی از تبدیل ها و عملیات مورد نیاز داده پردازی است. البته نقطه قوت اصلی اسپارک در توزیع این عملیات پردازشی در یک کلاستر (شبکه ای سیستم ها) و پنهان کردن جزییات و مسایل فنی آن از دید برنامه نویس و استفاده کننده است. اسپارک با تمرکز بر مقیاس پذیری و کارایی به گونه ای طراحی شده است که با استفاده از آن می توانید به توسعه ی راه حل خود با استفاده از یک مجموعه داده ی کوچک بر روی رایانه شخصی تان پرداخته  و سپس با استفاده از همان کد به پردازش مجموعه ای ترابایتی یا حتی پتا بایتی در سرتاسر یک خوشه ی (کلاستر) توزیع شده بپردازید.

در این آموزش ما به موضوعات زیر خواهیم پرداخت:

  • بخش ۱: استفاده از کتابچه ها و یکپارچه سازی پایتون با آن
  • بخش ۲: مقدمه ای بر استفاده از آپاچی اسپارک با استفاده از کتابخانه PySpark و اجرای آن در مرورگر
  • بخش ۳: استفاده از RDD ها و بررسی تبدیل ها و عملیات
  • بخش ۴: توابع لامبدا
  • بخش ۵: عملیات اجرایی پرکاربرد RDD ها
  • بخش ۶: تبدیل های رایج RDD
  • بخش ۷: ذخیره ی RDD ها و گزینه های ذخیره سازی
  • بخش ۸: اشکال زدایی برنامه های کاربردی اسپارک و lazy evaluation (ارزیابی با تاخیر)

در این آموزش، تبدیل های زیر تشریح خواهند شد:

map() , mapPartitions(), mapPartitionsWithIndex(), filter(),

flatMap(), reduceByKey(), groupByKey()

 

همچنین به توضیح عملیات زیر خواهیم پرداخت:

first(), take(), takeSample() , takeOrdered() , collect(),

count(), countByValue(), reduce(), top()

و در طول این آموزش، با توابع زیر نیز آشنا خواهید شد:

cache(), unpersist(),id(), setName()

 شما می توانید در صورت نیاز به اطلاعات بیشتر، جزئیات این متدها را در مستندات کتابخانه  PySpark مشاهده نمایید.


توابع و مفاهیمی که در این مجموعه آموزش فراخواهید گرفت منحصر به پایتون نبوده و همین توابع و مفاهیم عیناً در سایر زبانهایی که برای کار با اسپارک در نظر گرفته شده اند ( مانند اسکالا) نیز قابل استفاده است .

۱- استفاده از کتابچه های محاسباتی و یکپارچه سازی آن با پایتون

۱-۱ مقدمه ای بر کتابچه های محاسباتی

در بخش اول از آموزش اسپارک به معرفی اکانت رایگان شرک DataBricks و پنل وبی پرداختیم که این شرکت برای تست و اجرای برنامه های اسپارک در اختیار علاقه مندان میگذارد. اساس کار این وب سایت هم استفاده از کتابچه های محاسباتی پایتون (INotebook) برای اجرای کدهای اسپارک است. همانطور که اشاره شد، یک کتابچه یک فایل متنی ساده است که از دنباله ای خطی از سلول ها تشکیل شده است که هر سلول، یا حاوی کدهای اجرایی (پایتون، آر، اسکالا و …) است و یا متون و توضیحاتی که معمولاً با زبان نشانه گذاری ساده و مخصوصی به نام مارک داون MarkDown نوشته می شوند. این سلول ها هنگام نمایش به کاربر، به متون قابل نمایش در وب (HTML) تبدیل می شوند.  البته  ما نمی توانیم ترکیب هر دو را  (هم کد و هم توضیحات متنی به صورت توامان) درون یک سلول داشته باشیم.

نتایج سلول های کد هم زیر همان سلول نمایش داده میشود؛ مجموعه این سه قابلیت یعنی نوشتن همزمان توضیحات، کدها و نتایج آنها در یک محیط ، کتابچه ها را به ابزاری قدرتمند برای مقاصد آموزشی، یادداشت برداری در هنگام اجرای کدها و اجرای آنها در محیط مرورگر بدون نیاز به یک محیط برنامه نویسی، تبدیل کرده است. به همین دلیل هم یکی از رایجترین روشهای نمایش کدها، توضیحات و  خروجی های آنها توسط دانشمندان داده ، همین کتابچه ها هستند.


برای فعال کردن کتابچه ها در سیستم خود نیاز به نصب Jupyetr Notebook دارید که با نصب آن و اجرای دستورات مرتبط، یک وب سرور ساده شروع به کار می کند و پشت پورت ۸۸۸۸ کتابچه ها را سرویس دهی خواهد کرد یعنی سلول ها را اجرا و صفحه وب خروجی رابه کاربر نشان میدهد. کافیست بعد از نصب و اجرای آن، در مرورگر این آدرس را بزنید http://localhost:8888 تا صفحه مدیریت کتابچه ها برایتان باز شود و بتوانید کتابچه جدیدی ایجاد کرده یا کتابچه های قبلی را ویرایش نمایید. بنابراین در ذهن داشته باشید که برای اجرای کتابچه های محاسباتی، به یک سرور نیاز داریم که هنگام اجرای یک سلول کد یا توضیحات، کدها و یا توضیحات به این سرور ارسال شده و نتیجه اجرای آن در سلول های نتیجه به کاربر، نمایش داده می شود.

سلول های کد درون یک کتابچه پایتون (هنگام ایجاد یک کتابچه، زبان برنامه نویسی سلول های کد از شما پرسیده می شود) به شما این اجازه را می دهند تا دستورات دلخواه پایتون را درست مانند آنچه درون کنسول پایتون دارید، اجرا کنید. کافیست نشانگر موس را درون سلول قرار دهید و سپس دکمه های “Shift” + “Enter” را برای اجرای کد و انتقال به سلول بعدی انتخاب کنید. همچنین با استفاده از دکمه های “Ctrl” + “Enter” می توانید کد را اجرا کرده و در همان سلول باقی بمانید. این دستورات در هر دو نوع سلول های کد و سلول های متنی کار می کند.


اگر به کدهای نوشته شده در این مقالات علاقه مندید می توانید به اینجا مراجعه کنید تا نسخه اصلی این مقالات آموزشی را مشاهده و در صورت نیاز از کدهای نوشته شده آن استفاده کنید.

برای انجام کدهای موجود در این آموزش، طبق توضیحات بخش اول ، وارد اکانت کاربری خود در سایت DtaBricks شوید و یک کتابچه جدید ایجاد کرده و کدهای زیر را درون سلول ها کپی کنید و با زدن کلید Ctrl+Enter‌ نتیجه را مشاهده نمایید. اگر هم قصد اجرای این کدها روی سیستم خود و از طریق کتابچه ها دارید، این آموزش نصب اسپارک را از دست ندهید.

نمونه کد:


1
2
3
# This is a Python cell. You can run normal Python code here...

print 'The sum of 1 and 1 is {0}'.format(1+1)

نمونه ی دیگر:


1
2
3
4
5
6
7
# Here is another Python cell, this time with a variable (x) declaration and an if statement:

x = 42

if x > 40:

print 'The sum of 1 and 2 is {0}'.format(1+2)

۲-۱ وضعیت یک کتابچه

هنگام کار با کتابچه ها باید حواستان باشد که تمام سلول ها را اجرا کنید. نوت بوک یا همان کتابچه، ابزاری با قابلیت نگهداری سابقه است، بدین معنی که متغیرها و مقادیر آنها تا زمانی که نوت بوک به سرور متصل باشد (در Databricks) یا هسته مجدداً راه اندازی شود (ریست کردن سرور هنگام اجرا روی سیستم های شخصی)، در آن نگهداری می شود. اگر شما تمام سلول های کد (که به هم وابسته هستند) را  اجرا نکنید، این احتمال وجود دارد که متغیرهای شما به درستی مقداردهی نشده و بعداً در هنگام اجرا با شکست مواجه شوند.

.u62e1739f8c8a5d51e1bdb415c3d5ecbc { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#ECF0F1; border:0!important; border-left:4px solid #2980B9!important; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.17); -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.17); -o-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.17); -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.17); text-decoration:none; } .u62e1739f8c8a5d51e1bdb415c3d5ecbc:active, .u62e1739f8c8a5d51e1bdb415c3d5ecbc:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u62e1739f8c8a5d51e1bdb415c3d5ecbc { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u62e1739f8c8a5d51e1bdb415c3d5ecbc .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u62e1739f8c8a5d51e1bdb415c3d5ecbc .postTitle { color:#D35400; text-decoration: underline!important; font-size: 16px; } .u62e1739f8c8a5d51e1bdb415c3d5ecbc:hover .postTitle { text-decoration: underline!important; }

برای مطالعه :   تحلیل جام جهانی ۲۰۱۴ برزیل با Power BI – بخش اول

مثلاً اگر شما ده سلول کد دارید و به ترتیب همه را اجرا کرده اید، نتایج را زیر هر سلول مشاهده خواهید کرد. حال اگر مقدار متغیرها یا کدهای سلول سوم را تغییر دهید ومجددا اجرا کنید، تنها خروجی همان سلول بروز رسانی میشود و بقیه سلول ها مقادیر قدیمی را دارند بنابراین به ترتیب (یا با دستور اجرای تمام سلول ها) باید سلول های بعدی را اجرا کنید تا مقادیر جدید جانشین خروجی های قبلی شوند.

۳-۱ استفاده از کتابخانه ها

مطمئناً برای نوشتن کدهای حرفه ای به کتابخانه های مختلفی درون یک کتابچه نیاز خواهیم داشت. ما می توانیم کتابخانه های استاندارد پایتون (ماژول ها) را به روش معمول، درون هر سلول که به آن نیاز داریم، ایمپورت کنیم. در این آموزش ما کتابخانه های مورد نیاز و دستورات ایمپورت متناظر را به شما اعلام خواهیم کرد. کتابخانه های اصلی همه در کتابچه های سایت DataBricks در دسترس هستند اما اگر روی سیستم خودتان قصد نصب کتابچه ها و استفاده از آن را برای اجرای اسپارک دارید، کتابخانه ها را باید در نسخه پایتون خودتان به صورت دستی نصب کنید .

 ۲-مروری بر معماری اسپارک و شروع کار با PySpark

همانطور که در بخش اول توضیح داده شد، برای اجرای کدهای اسپارک به دو مولفه اصلی نیاز داریم . یکی درایور (هماهنگ کننده یا مدیربرنامه)که وظیفه توزیع و مدیریت کارها را بر عهده دارد و دومی، مولفه اجرا کننده (Worker) که کارهای محاسباتی و پردازشی را انجام داده و نتیجه را به هماهنگ کننده یا درایور برمیگرداند. به صورت فنی تر اگر بخواهیم صحبت کنیم، هر درخواست پردازش از سمت کاربر یک Job را تشکیل می دهد که به درایور اسپارک تحویل داده میشود . درایور اسپارک، این درخواست پردازشی را به چندین وظیقه Task تقسیم کرده بین اجرا کننده ها توزیع می کند . اجرا کننده ها (Workers) معمولاً درون یک کلاستر (شبکه بهم پیوسته) قرار دارند. Task ها بعد از اتمام، نتایج را به درایور یا مدیربرنامه تحویل می دهند.

در بخش ۱ ملاحظه نمودید که کدهای پایتون خود را درون سلول های یک کتابچه محاسباتی، خواهیم نوشت و همانجا هم اجرا خواهیم کرد. زمانی که از Databricks استفاده می کنید، این کد درون ماشین مجازی کامپیوتر درایور (و نه ماشین مجازی سیستم های اجرا کننده) اجرا می شود یعنی در این آموزش، ما از امکانات شبکه و توزیع کارها بین گره های محاسباتی یک کلاستر استفاده نخواهیم کرد و تمام دستورات اسپارک ما به صورت محلی اجرا خواهند شد. با این وجود، قابلیت های اصلی اسپارک را در این سری آموزشی به صورت کامل یاد خواهید گرفت. همچنین زمانی که ما از یک نوت بوک IPython استفاده می کنیم، این کد درون هسته ی مرتبط با نوت بوک اجرا می شود که در برنامه های واقعی شاید نیاز به اجرای مستقیم کدهای پایتون بدون استفاده از کتابچه ها داشته باشید.

برای استفاده از اسپارک و امکانات و توابع آن (API) ما به SparkContext یا همان بستر اجرایی اسپارک نیاز داریم. برای اجرای اسپارک، هر برنامه ی کاربردی جدید در آن را با ایجاد یک SparkContext شروع خواهید کرد. پس از ایجاد بسترگاه اسپارک، اولین کاری که انجام میشود تقاضای چند هسته سی پی یو از سرور اصلی برای اجرای دستورات آتی اسپارک است. سرور هم این هسته ها را به صورت جداگانه تنها به شما اختصاص می دهد به طوری که این هسته ها نمی توانند در سایر برنامه ها و یا توسط سایر کاربران استفاده شوند (البته تا پایان اجرای کدهای شما). هنگام استفاده از امکانات Databricks، بسترگاه اسپارک به طور خودکار تحت عنوان sc برای شما ایجاد خواهد شد.

۱-۲ بررسی یک کلاستر اسپارک

شکل زیر یک کلاستر اسپارک را مطابق با توضیحات بالا نمایش می دهد که در آن هسته های اختصاص داده شده به یک برنامه با خط چین بنفش مشخص شده اند. (نکته: در نسخه ی عمومی و رایگان شرکت DataBricks  اجرا کننده  در حقیقت وجود ندارد و Master به تنهایی تمام کدها را اجرا خواهد کرد که در شکل نمایش داده نشده است).

s1s1شما می توانید جزئیات برنامه ی اسپارک خود را در رابط کاربری تحت وب اسپارک (UI spark web) مشاهده کنید. این رابط کاربری در Databricks با رفتن به منوی Clusters قابل دسترسی است و با انتخاب گزینه ی View Spark UI شما می توانید کلاستر (مجموعه از کامپیوترها که وظیفه اجرای اسپارک را برعهده دارند.) خود را مشاهده نمایید. (زمانی که شما اسپارک را بر روی سیستم خود(لوکال هاست) و به صورت محلی استفاده می کنید، می توانید آن را در آدرس localhost:4040 مشاهده کنید). در رابط کاربری تحت وب، در سربرگ Jobs، شما می توانید لیستی از کارهایی که زمان بندی شده و آماده اجرا هستند و یا اجرا شده اند را مشاهده کنید. احتمالاً هنور هیچ کاری را اجرا نکرده اید و بنابراین مورد خاصی در حال حاضر در این بخش وجود نخواهد داشت، اما در بخش های بعدی به این صفحه باز خواهیم گشت.

در Databricks، برنامه هماهنگ کننده یا درایور، “Databricks Shell” است و زمانی که برنامه را بر روی هاست محلی اجرا می کنید، “PySparkShell” برنامه ی درایور اسپارک شما می باشد. در هر صورت، این برنامه ی درایور شامل کدهای اصلی برنامه بوده، توزیع داده ها در شبکه و سپس انجام تبدیلات و عملیات پردازشی را بر روی مجموعه داده های توزیع شده بر عهده دارد.

برنامه ی درایور از طریق SparkContext یا بستراجرایی اسپارک به شبکه محاسباتی در نظر گرفته شده برای اجرای دستورات اسپارک دسترسی دارد. (SparkContext(sc، نقطه ورودی اصلی برای تمامی امکانات اسپارک است. از طریق یک Sc می توانید مجموعه داده های توزیع شده برگشت پذیر  معروف اسپارک یا همان RDD ها را در یک شبکه به راحتی ایجاد و با آنها شروع به کار کنید بدون اینکه درگیر پیچیدگیهای توزیع شدگی و روابط بین سیستم ها در یک کلاستر شوید.

۲-۲ ویژگی های SparkContext

شما می توانید از تابع پایتونی dir برای مشاهده ی لیست همه ویژگی های در دسترس برای SC (شامل متدها و صفات) استفاده کنید.


۲-۳ استفاده از راهنما

علاوه بر کد بالا، شما می توانید به راحتی از تابع پایتونی ()help برای مشاهده لیست همه ی ویژگی ها و توابع Sc به همراه مثال های مربوط به آن استفاده کنید.

spark2spark2

۳- استفاده از RDD ها و ایجاد زنجیره ای از تبدیلات و عملیات

کار با اولین RDD

در اسپارک، همیشه کار خود را با یک مجموعه داده ی پایه (Base RDD) که قرار است پردازشی روی آن انجام دهیم، شروع می کنیم  . اگر این مجموعه داده توزیع شده برگشت پذیر یا همان RDD که ساختمان داده اصلی در اسپارک است، وجود نداشت به راحتی از روی داده های موجود مانند داده های موجود در HDFS، بانکهای اطلاعاتی، فایلها و سایر منابع داده ای، آنرا ایجاد خواهیم کرد. پردازش اصلی داده های ما در اسپارک مجموعه عملیات و تبدیلاتی است که روی این  RDD پایه،انجام خواهیم داد و چون در فرهنگ اسپارک، یک RDD تغییر ناپذیر است، با هر تبدیل یا انجام یک عملیات، یک RDD جدید ایجاد خواهد شد تا زمانی که به جواب مورد نیاز خود رسیده و پردازش ما به اتمام برسد.


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

.u4d9e53a4f1a369d515b667aafd1e74e2 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#ECF0F1; border:0!important; border-left:4px solid #2980B9!important; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.17); -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.17); -o-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.17); -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.17); text-decoration:none; } .u4d9e53a4f1a369d515b667aafd1e74e2:active, .u4d9e53a4f1a369d515b667aafd1e74e2:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u4d9e53a4f1a369d515b667aafd1e74e2 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u4d9e53a4f1a369d515b667aafd1e74e2 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u4d9e53a4f1a369d515b667aafd1e74e2 .postTitle { color:#D35400; text-decoration: underline!important; font-size: 16px; } .u4d9e53a4f1a369d515b667aafd1e74e2:hover .postTitle { text-decoration: underline!important; }

برای مطالعه :   شروع کار با اسپارک : راه اندازی محیط کار

توجه داشته باشید که اسپارک از روش ارزیابی با تاخیر (lazy evaluation) استفاده می کند، بنابراین تبدیل ها تا زمانی که یک عملیات (action) فراخوانی نشود، اجرا نخواهد شد.

برای درک بهتر RDD ها ما چند تمرین زیر را انجام خواهیم داد:

  • ایجاد یک مجموعه ی پایتون شامل ۱۰۰۰۰ عدد صحیح
  • ایجاد یک RDD پایه در اسپارک از مجموعه ی بالا
  • کاهش یک رقمی هر کدام از اعداد با استفاده از تابع map
  • انجام عملیات collect برای مشاهده نتایج
  • انجام عمل count برای شمارش اعداد
  • اعمال تبدیل filter و مشاهده ی نتایج با استفاده از collect
  • آشنایی با توابع لامبدا
  • بررسی چگونگی عملکرد lazy evaluation (ارزیابی با تاخیر) و معرفی چالش های اشکال زدایی مربوط به آن

۱-۳ ایجاد یک مجموعه ی پایتون از اعداد صحیح در بازه ی ۱ تا ۱۰۰۰۰

ما از تابع ()xrange برای ایجاد لیستی از اعداد صحیح استفاده خواهیم کرد. مزیت این تابع در تولید اعداد این است که مقادیر را زمانی تولید می کند که به آنها نیاز داریم. تفاوت این تابع با تابع ()range این است که تابع ()range ، کل لیست حاوی بازه اعداد داده شده را یکجا تولید می کند که این امر برای اعداد بسیار بزرگ، مشکل کمبود حافظه را در برخواهد داشت در حالی که تابع ()xrange هر عنصر لیست را وقتی که به آن نیاز داریم، تولید می کند یعنی وقتی یک عنصر تولید شد و داخل حلقه برنامه، از آن استفاده کردیم، هنگام درخواست عدد بعدی توسط برنامه، در همان لحظه تولید و تحویل برنامه خواهد شد. به همین دلیل هنگام کار با بازه های بزرگ، استفاده از تابع xrange باعث استفاده ی موثرتر از حافظه خواهد شد.

این اعداد را به صورت زیر تولید می کنیم :

۲-۳ توزیع داده ها در اسپارک و استفاده از یک مجموعه برای تولید RDD

در اسپارک، یک مجموعه داده لیستی از عناصر داده ای است که خود این لیست به چندین پارتیشن یا بخش مختلف شکسته می شود و هر پارتیشن هم روی یک کامپیوتر ذخیره می شود. هر پارتیشن حاوی یک زیرمجموعه ی منحصربفرد از محتوای لیست است. اسپارک این مجموعه داده توزیع شده را مجموعه داده توزیع شده ی برگشت پذیر (RDDs) می نامد.

یکی از ویژگی های اصلی اسپارک، در مقایسه با دیگر چارچوب های تحلیل داده (از قبیل هدوپ)، ذخیره سازی داده بر روی حافظه به جای دیسک می باشد. این ویژگی به برنامه های اسپارک اجازه می دهد که با سرعت بیشتری اجرا شوند، چرا که به مراجعه به دیسک برای خواندن اطلاعات، که باعث کند شدن پردازش می شود، نیاز ندارند. تصویر زیر فرآیند تجزیه یک لیست به چند بخش و توزیع هر یک را  ببین چندین  سیستم ، به خوبی نمایش می دهد.  هر کدام از این بخش ها در حافظه یک Worker ذخیره می شوند.

s2s2

برای ایجاد RDD، ما باید از ()sc.parallelize، استفاده کنیم. این کد به اسپارک می گوید که یک مجموعه ی داده RDD از داده های ورودی ایجاد کند. در این مثال، ما از یک xrange به عنوان تولید کننده داده های ورودی استفاده می کنیم. دومین ورودی این تابع هم بیان می کند از چه تعداد پارتیشین برای شکستن داده ها در هنگام ذخیره آنها در حافظه استفاده شود (در بخش های بعدی این آموزش بیشتر در این باره بحث خواهیم کرد). توجه داشته باشید که برای عملکرد بهتر در هنگام استفاده از ()sc.parallelize، اگر ورودی شما از نوع بازه ای است حتماً از ()xrange استفاده کنید. ( دلیل این انتخاب در بخش قبل ذکر شد).

RDDها انواع مختلفی دارند. یک کلاس پایه برای همه ی RDD ها وجود دارد و سایر RDD ها زیرکلاس های این کلاس pyspark.RDD هستند. از آنجایی که انواع دیگر RDD از pyspark.RDD ارث بری دارند، بنابراین دارای API و عملکرد یکسانی هستند. با اجرای کدهای زیر، خواهید دید زمانی که ورودی از نوع Xrange باشد، تابع ()sc.parallelize  نتیجه ای از نوع pyspark.rdd.PipelinedRDD را تولید کرده و زمانی که ورودی از نوع range باشد، pyspark.RDD را تولید خواهد کرد. (دستور type‌ در پایتون نوع یک داده را به ما برمی گرداند.)

پس از تولید RDD ها، شما می توانید فهرست آنها را در سربرگ Storage در رابط کاربری تحت وب مشاهده کنید. البته مجموعه داده های جدید در این لیست وجود ندارد. دلیل آن هم این است که تا زمانی که اسپارک نیاز به برگرداندن نتیجه ی یک عملیات اجرایی نداشته باشد، مجموعه داده های جدید را تولید نخواهد کرد. این ویژگی اسپارک lazy evaluation یا ارزیابی با تاخیر خوانده می شود. این امر به اسپارک اجازه می دهد تا از انجام محاسبات غیرضروری جلوگیری کند.

با کد فوق اولین RDD‌ خود را با هشت پارتیشن از روی data که بالاتر آنرا ایجاد کرده ایم، می سازیم. اگر می خواهید جزییات بیشتری از تابع parallelize مشاهده کنید از دستور help به صورت زیر استفاده کنید :

برای مقایسه نوع مجموعه داده تولید شده با دستور range و دستور xrange ، یک RDD جدید با کمک تابع  range ایجاد کرده و نوع آنرا با مجموعه داده قبلی مقایسه می کنیم . نتیجه را در زیر مشاهده می کنید  :

به هر مجموعه داده یک شناسه منحصر به فرد اختصاص می یابد که با تابع id روی آن مجموعه داده می توانیم به آن دسترسی داشته باشیم :

به مجموعه داده های خود که توسط اسپارک تولید می شود می توانید یک نام اختصاص دهید که مراجعه و رفع خطاهای آنها راحت تر صورت گیرد :

تعداد پارتیشن های اختصاص داده شده به یک مجموعه داده را هم به صورت زیر می توانید به دست آورید :

اکنون مجموعه داده های ما برای مرحله بعد که مرحله انجام چند پردازش روی آنهاست، آماده شده اند.

ادامه مقاله در صفحه بعدی – روی شماره صفحه در زیر کلیک کنید –>


۱۳۹۶-۰۱-۱۰

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *