আমি মনে করি প্রশ্নটি আরও ভালভাবে প্রণয়ন করা হবে:
আমাদের কখন ক্যাশে কল করা বা আরডিডি চালিয়ে যাওয়া দরকার?
স্পার্ক প্রক্রিয়াগুলি অলস হয়, এটি প্রয়োজন না হওয়া পর্যন্ত কিছুই ঘটবে না। প্রশ্নের জবাব দেওয়ার জন্য, val textFile = sc.textFile("/user/emp.txt")
জারি করার পরে , তথ্যের সাথে কিছুই হয় না, কেবল HadoopRDD
উত্স হিসাবে ফাইলটি ব্যবহার করে, এটি নির্মিত হয়।
ধরা যাক আমরা সেই ডেটাটি কিছুটা রূপান্তরিত করেছি:
val wordsRDD = textFile.flatMap(line => line.split("\\W"))
আবার, ডেটা কিছুই হয় না। এখন একটি নতুন আরডিডি wordsRDD
রয়েছে যার একটি রেফারেন্স রয়েছে testFile
এবং প্রয়োজনের সময় প্রয়োগ করার জন্য একটি ফাংশন রয়েছে ।
আরডিডি-তে যেমন কোনও ক্রিয়াকলাপ ডাকা হয় কেবল তখনই wordsRDD.count
, আরডিডি চেইন, যাকে বংশ বলা হয় কার্যকর করা হবে। অর্থাৎ পার্টিশনগুলিতে বিভক্ত ডেটা স্পার্ক ক্লাস্টারের এক্সিকিউটাররা লোড করবে, flatMap
ফাংশনটি প্রয়োগ করা হবে এবং ফলাফল গণনা করা হবে।
একটি লিনিয়ার বংশে, যেমন উদাহরণের মতো এটির cache()
প্রয়োজন হয় না। এক্সিকিউটারদের উপর ডেটা লোড করা হবে, সমস্ত রূপান্তর প্রয়োগ করা হবে এবং পরিশেষে count
মেমরিতে সমস্ত গণনা করা হবে - যদি ডেটা মেমরিতে ফিট করে।
cache
আরডিডি শাখার বংশটি যখন কার্যকর হয় তখন কার্যকর হয়। ধরা যাক আপনি পূর্ববর্তী উদাহরণের শব্দগুলিকে ইতিবাচক এবং নেতিবাচক শব্দের একটি গণনায় ফিল্টার করতে চান। আপনি এটির মতো এটি করতে পারেন:
val positiveWordsCount = wordsRDD.filter(word => isPositive(word)).count()
val negativeWordsCount = wordsRDD.filter(word => isNegative(word)).count()
এখানে, প্রতিটি শাখা তথ্য পুনরায় লোড ইস্যু করে। একটি স্পষ্ট cache
বিবৃতি যোগ করা নিশ্চিত করবে যে পূর্বে সম্পন্ন প্রক্রিয়াজাতকরণ সংরক্ষণ ও পুনরায় ব্যবহৃত হয়েছে। কাজটি দেখতে এইরকম দেখাবে:
val textFile = sc.textFile("/user/emp.txt")
val wordsRDD = textFile.flatMap(line => line.split("\\W"))
wordsRDD.cache()
val positiveWordsCount = wordsRDD.filter(word => isPositive(word)).count()
val negativeWordsCount = wordsRDD.filter(word => isNegative(word)).count()
যে কারণে cache
এটি 'বংশ ভাঙ্গা' বলা হয় কারণ এটি একটি চেকপয়েন্ট তৈরি করে যা আরও প্রক্রিয়াজাতকরণের জন্য পুনরায় ব্যবহার করা যেতে পারে।
থাম্বের বিধি: cache
যখন আপনার আরডিডি শাখার বংশটি বাইরে চলে যায় বা যখন কোনও আরডিডি লুপের মতো একাধিকবার ব্যবহৃত হয় তখন ব্যবহার করুন।