Spark SQL-এর DataFrame এবং Dataset দুটি প্রধান ডেটা স্ট্রাকচার, যা ব্যবহারকারীদের ডিস্ট্রিবিউটেড ডেটা প্রসেস করতে সহায়তা করে। DataFrame এবং Dataset উভয়ই Spark-এর প্রধান ইন্টারফেস হিসেবে কাজ করে এবং তাদের মধ্যে দুই ধরনের অপারেশন করা যায়: Transformation এবং Action। চলুন, DataFrame এবং Dataset-এর মধ্যে Transformation এবং Action এর পার্থক্য এবং ব্যবহার সম্পর্কে বিস্তারিত জানি।
DataFrame এবং Dataset
DataFrame হলো একটি অর্গানাইজড ডেটা স্ট্রাকচার, যা RDD-এর উপর ভিত্তি করে তৈরি, কিন্তু এতে ট্যাবুলার ডেটা, কলাম এবং স্কিমা থাকে। এটি একটি টেবিলের মতো কাজ করে, যেখানে এক বা একাধিক কলাম থাকে এবং প্রতিটি কলামে ডেটা থাকে।
Dataset হল DataFrame-এর একটি টাইপ সেফ ভার্সন, যা একটি ফর্মাল টাইপ (যেমন Java, Scala) ব্যবহার করে ডেটা হ্যান্ডলিং করতে পারে। Dataset API Type Safety প্রদান করে, যা DataFrame-এর তুলনায় আরো বেশি নিয়ন্ত্রিত এবং ত্রুটি চেক করার সুযোগ দেয়।
Transformation এবং Action
Spark SQL-এ Transformation এবং Action দুটি গুরুত্বপূর্ণ কনসেপ্ট, যা DataFrame এবং Dataset এর উপর কাজ করতে ব্যবহৃত হয়।
Transformation
Transformation হলো এমন অপারেশন যা DataFrame বা Dataset-এর উপরে কাজ করে এবং নতুন একটি DataFrame বা Dataset তৈরি করে। Transformation গুলি লিনিয়ার এবং লেজি (lazy) হয়, অর্থাৎ তারা তখন পর্যন্ত কার্যকরী হয় না যতক্ষণ না Action অপারেশন চালানো না হয়। Spark এই Transformation গুলি সিস্টেমে অপটিমাইজ করে এবং শুধুমাত্র যখন Action অপারেশন কার্যকরী হয় তখন এটি এক্সিকিউট করা হয়।
Map: DataFrame বা Dataset এর প্রতিটি উপাদানের ওপর নির্দিষ্ট কোনো কাজ করতে ব্যবহৃত হয়।
df_transformed = df.map(lambda x: x + 1)Filter: DataFrame বা Dataset থেকে নির্দিষ্ট শর্ত পূরণকারী রেকর্ডগুলি বাছাই করতে ব্যবহৃত হয়।
df_filtered = df.filter(df['age'] > 30)Select: নির্দিষ্ট কলাম নির্বাচন করতে ব্যবহৃত হয়।
df_selected = df.select("name", "age")Join: দুটি DataFrame বা Dataset একসাথে যুক্ত করতে ব্যবহৃত হয়।
df_joined = df1.join(df2, df1.id == df2.id)GroupBy: DataFrame বা Dataset কে নির্দিষ্ট একটি কলাম অনুযায়ী গ্রুপ করতে ব্যবহৃত হয়।
df_grouped = df.groupBy("age").count()
Action
Action হলো এমন অপারেশন যা DataFrame বা Dataset থেকে একটি ফলাফল ফেরত দেয় বা একটি কার্যকরী প্রক্রিয়া সম্পন্ন করে। Action অপারেশন এক্সিকিউট হওয়ার পরেই Transformation গুলি বাস্তবায়িত হয়। Action সাধারণত ডেটা রিটার্ন করতে ব্যবহার করা হয়, যেমন ডেটা প্রিন্ট করা, একটি ফাইল সেভ করা বা কোনো পরিসংখ্যান হিসাব করা।
Show: DataFrame বা Dataset এর কিছু সারি দেখতে ব্যবহৃত হয়।
df.show(5)Collect: DataFrame বা Dataset এর সমস্ত ডেটা একটি ক্লায়েন্টে সংগ্রহ করতে ব্যবহৃত হয়।
data = df.collect()Count: DataFrame বা Dataset এ মোট রেকর্ডের সংখ্যা বের করতে ব্যবহৃত হয়।
count = df.count()Reduce: একাধিক মানের উপর একটি ফাংশন প্রয়োগ করে একটি একক মানে রিডিউস করতে ব্যবহৃত হয়।
result = df.rdd.reduce(lambda x, y: x + y)Save: DataFrame বা Dataset কে একটি ফাইল সিস্টেমে সেভ করতে ব্যবহৃত হয়।
df.write.csv("output.csv")
DataFrame এবং Dataset এর মধ্যে পার্থক্য
- Type Safety: Dataset হল টাইপ সেফ, যা কম্পাইল টাইমে ত্রুটি চেক করতে সাহায্য করে, কিন্তু DataFrame-এ টাইপ সেফটি নেই এবং এটি কেবল ডাইনামিক টাইপড।
- API: DataFrame এবং Dataset-এর API একে অপরের উপর নির্ভরশীল। Dataset হল DataFrame-এর টাইপ সেফ ভার্সন, যেখানে আপনি Java/Scala ভাষায় নির্দিষ্ট টাইপের ব্যবহার করতে পারেন।
- পারফরম্যান্স: DataFrame এবং Dataset এর মধ্যে পারফরম্যান্সের দিক থেকে তেমন কোনো পার্থক্য নেই, কারণ উভয়ই একই Catalyst Optimizer এবং Tungsten প্রকল্পের মাধ্যমে অপটিমাইজ হয়।
সারাংশ
Spark SQL-এ Transformation এবং Action দুইটি গুরুত্বপূর্ণ অপারেশন যা DataFrame এবং Dataset-এর ওপর কার্যকরী হয়। Transformation গুলি ডেটাকে পরিবর্তন করে এবং নতুন DataFrame বা Dataset তৈরি করে, যখন Action গুলি ডেটার ওপর কার্যকরী হয়ে ফাইনাল আউটপুট বা রেজাল্ট তৈরি করে। DataFrame এবং Dataset উভয়ই Spark SQL-এ ডিস্ট্রিবিউটেড ডেটা প্রসেসিং এবং অ্যানালাইসিসের জন্য ব্যবহৃত হয়, তবে Dataset বেশি টাইপ সেফ এবং বেশি নিয়ন্ত্রিত।
Read more