জাস্টিনের উত্তর দুর্দান্ত এবং এই প্রতিক্রিয়া আরও গভীরতর মধ্যে যায়।
repartitionঅ্যালগরিদম একটি পূর্ণ এলোমেলো করে এবং ডেটা সমানভাবে বিতরণ হচ্ছে সাথে নতুন পার্টিশন তৈরি করে। 1 থেকে 12 নম্বর সহ একটি ডেটা ফ্রেম তৈরি করা যাক।
val x = (1 to 12).toList
val numbersDf = x.toDF("number")
numbersDf আমার মেশিনে 4 টি পার্টিশন রয়েছে।
numbersDf.rdd.partitions.size // => 4
পার্টিশনের উপর ডেটা কীভাবে ভাগ করা যায় তা এখানে:
Partition 00000: 1, 2, 3
Partition 00001: 4, 5, 6
Partition 00002: 7, 8, 9
Partition 00003: 10, 11, 12
আসুন repartitionপদ্ধতিটির সাথে একটি পূর্ণ শ্যফেল করুন এবং দুটি নোডে এই ডেটাটি নিয়ে আসি।
val numbersDfR = numbersDf.repartition(2)
numbersDfRআমার মেশিনে ডেটা কীভাবে বিভক্ত করা হয়েছে তা এখানে :
Partition A: 1, 3, 4, 6, 7, 9, 10, 12
Partition B: 2, 5, 8, 11
repartitionপদ্ধতি নতুন পার্টিশন করে তোলে এবং সমানভাবে নতুন পার্টিশন ডাটা বিতরণ (ডাটা বন্টন আরো এমনকি বড় ডেটা সেটের জন্য) হয়।
coalesceএবং মধ্যে পার্থক্যrepartition
coalesceযে পরিমাণে ডেটা বদলে গেছে তা হ্রাস করতে বিদ্যমান পার্টিশন ব্যবহার করে। repartitionনতুন পার্টিশন তৈরি করে এবং পুরো শ্যাফেল করে। coalesceবিভিন্ন পরিমাণে ডেটা (অনেক সময় পার্টিশনের মধ্যে অনেক বেশি আকার রয়েছে) এর repartitionপার্টিশনের ফলাফল এবং প্রায় সমান আকারের পার্টিশনের ফলাফল।
কি coalesceবা repartitionদ্রুততর?
coalesceতুলনায় দ্রুত চলতে পারে repartition, তবে অসম আকারের পার্টিশনগুলি সমান আকারের পার্টিশনের তুলনায় সাধারণত ধীর হয়। একটি বড় ডেটা সেট ফিল্টার করার পরে আপনার সাধারণত ডেটাসেটগুলি পুনরায় ভাগ করতে হবে। আমি repartitionসামগ্রিকভাবে দ্রুত হতে পেরেছি কারণ স্পার্ক সমান আকারের পার্টিশনগুলির সাথে কাজ করতে নির্মিত।
এনবি আমি কৌতূহলবশত পর্যবেক্ষণ করেছি যে পুনরায় বিভাজন ডিস্কে ডেটার আকার বাড়াতে পারে । আপনি যখন বড় ডেটাসেটগুলিতে বিভাগ / coalesce ব্যবহার করছেন তখন পরীক্ষা চালানোর বিষয়ে নিশ্চিত হন।
আপনি আরও বিশদ জানতে চাইলে এই ব্লগ পোস্টটি পড়ুন ।
আপনি যখন অনুশীলনে কোলেসেস এবং পার্টিশন ব্যবহার করবেন
minimize data movementপরিবর্তে ভাল বলা উচিত ছিলavoiding data movement।