جلسه 7 اسپارک

چالش های موجود در join

اگر بخواهیم فایل خروجی را ذخیره کنیم با خطایی روبرو میشویم:

result_df.write.json('myfile')

نتیجه:

دلیل این است که اگر printSchema بگیریم متوجه میشویم که از برخی از ستون ها دو مورد داریم:

راه حل:

1- سلکت کردن مواردی که همتای تکراری ندارند:

result_df.select('rate','USERNAME','BookTitle').write.json('myfile')

2- دراپ کردن موارد تکراری:

3- روش سوم rename کردن است در همان ابتدای ورود:

rating_df.withColumnRenamed('userid','rating_uid').\
withColumnRenamed('isbn','rating_isbn').createOrReplaceTempView('rating')

و مجددا درخواست join کردن با قید where:

result_df=spark.sql('select * from rating, users , books WHERE rating.rating_uid==users.userid AND rating.rating_isbn== books.isbn')
result_df.printSchema()

نتیجه:

ایده پست لینکدین

(موارد بالا به عنوان یک چالش در ذخیره رکوردها با وجود ستون های با نام تکراری(اسلایدی یا ویدئو))

تا دقیقه 27

نکته:

بیشتر نکات ذکر شده در جلسه در فایل گیت هاب منعکس شده است. بنابراین پیشنهاد میشود، به بخش منابع رجوع شود.

نکات تئوری:

زمانی که به طور حدودی بخواهیم برای مثال جمعیت ایران را بدست بیاوریم: حدودی معادل approximately است که در زیر از آن استفاده شده است.

اسپارک به زبان اسکالا نوشته شده

SVM یعنی scala virtual machine

py4j — باعث میشود که بتوان از زبان پایتون استفاده کرد . در واقع بتوان از با استفاده از پایتون به آبجکت های جاوا ویرچوال ماشین jvm دسترسی داشت. بعبارت دیگر کد پایتون نوشته شده در paspark توسط رابطی به نام py4j به ماشین جاوا دسترسی پیدا میکند.

زمانی که udf مینویسیم، pure python داریم. یعنی فقط مفسز اختصاصی پایتون آن را میفهمد. یعنی فضایی خارج از jvm باید باشد تا آنرا بفهمد. نکته منفی در اینجا این است که، ممکنه udf ای باشد که رم کل ماشین را بگیرد و کسی هم نفهمد . به سایررین رم نمیرسد. بنابراین در هنگام نوشتن udf باید حواسمان باشد به این موضوع . یک راه حل این است که udf را به صورت بک jar file بنویسیم و آ نرا فراخوانی کنیم.

در واقع در همان رجیستر کردن که در کد خود استفاده کردیم میتوان از کد زیر برای معرفی ادرس jar File استفاده نمود.

# موضوع بعدی
spark.udf.register.javaFunction('my_udf',JAR ADDRess)
spark.sql('select *, itemPlusFive(rate) AS my_udf(rate) from rating where rate>5').show()

اینگونه باعث میشود که برای خواندن فایل پایتون دیگر یک پایتون بالا آورده نشود و در همان jvm آن را مدیریت نماید

udf3 یعنی سه تا ورودی میگیرد و یک خروجی

udf5 یعنی 5 تا ورودی میگیرد ویک خروجی میدهد.

در مورد hdfs

تعریف:

تعریف cluster : مجموعه ای از سرورها که کار ذخیره سازی وپردازش رو برامون انجام میدن.

hadoop یا hdfs برای کجاها خوب است؟:

زمانی که میخواهم فایل بزرگ ذخیره کنم. (منظور بیش از 100 مگ فعلا).

برای streaming data : یک بار نوشته بشه و بارها خواند بشه. (مثلا در موجودی بانک ، تحلیل موجودی ، تحلیل ریسک، تحلیل … )

ماژول raspberry pi:

ماژولی که میتوان روی آن hdfs نصب کرد.

hdfs برای کجا خوب نیست؟

جایی که تاخیر کم میخواهیم hdfs برای ما مناسب نیست

زمانی که تعداد زیاد فایل کوچیک داریم hdfs مناسب نیست

فرمتی وجود دارد به نام sequenced file که برای حل مشکل پرفورمنسی استفاده میشود( تبدیل تعداد زیاد فایلها به تعداد کمتر)

در HDFS معماری master slave داریم:

یک کلاستر هدوپ به شکل زیر است:

فایلهای درHDFS به تعدادی بلاک تقسیم میشوند:

تا ساعت 3 ودقیقه 11

مابقیه جلسه مربوط به نصب hadoop بود که کامل متوجه نشدم.

CLI به معنای command line inter dace است

لینک های نمونه از اجرای hadoop در colab :

لینک 1

لینک 2

پایان جلسه- طول کل 3 ساعت و 36 دقیقه

منابع:

1- گیت هاب Strumer

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

نشانی ایمیل شما منتشر نخواهد شد.