বিভিন্ন ধরনের Joins (Inner, Outer, Cross, Semi) এর ব্যবহার

Joins এবং Subqueries - স্পার্ক এসকিউএল (Spark SQL) - Big Data and Analytics

305

Spark SQL-এ Joins একটি অত্যন্ত গুরুত্বপূর্ণ কৌশল যা ডিস্ট্রিবিউটেড ডেটার মধ্যে সম্পর্ক তৈরি করতে এবং বিভিন্ন টেবিল বা DataFrame-এর মধ্যে ডেটা একত্রিত করতে ব্যবহৃত হয়। Joins এর মাধ্যমে দুটি বা তার বেশি ডেটাসেটের মধ্যে সম্পর্ক স্থাপন করা সম্ভব হয়। Spark SQL-এ বিভিন্ন ধরনের Joins রয়েছে, যেমন Inner Join, Outer Join, Cross Join, এবং Semi Join। চলুন, প্রতিটি ধরনের join এর বিস্তারিত ব্যবহার এবং তাদের পারফরম্যান্স কিভাবে প্রভাবিত হতে পারে, তা দেখি।


১. Inner Join

Inner Join হল একটি সাধারণ Join টাইপ যা দুটি DataFrame বা টেবিলের মধ্যে মিল থাকা রেকর্ডগুলোকে একত্রিত করে। যখন দুটি টেবিলের মধ্যে কিছু সুনির্দিষ্ট কলামের মান একে অপরের সাথে মিলে যায়, তখন সেই রেকর্ডগুলোকে Inner Join দ্বারা একত্রিত করা হয়।

উদাহরণ:

from pyspark.sql import SparkSession

# SparkSession তৈরি
spark = SparkSession.builder.appName("Inner Join Example").getOrCreate()

# দুটি DataFrame তৈরি করা
data1 = [("John", 30), ("Alice", 25), ("Bob", 35)]
data2 = [("John", "HR"), ("Alice", "Finance"), ("Charlie", "IT")]

columns1 = ["Name", "Age"]
columns2 = ["Name", "Department"]

df1 = spark.createDataFrame(data1, columns1)
df2 = spark.createDataFrame(data2, columns2)

# Inner Join
df_joined = df1.join(df2, df1.Name == df2.Name, "inner")
df_joined.show()

আউটপুট:

+-----+---+--------+-------+
| Name|Age|    Name|Department|
+-----+---+--------+-------+
| John| 30|    John|       HR|
|Alice| 25|   Alice|  Finance|
+-----+---+--------+-------+

এখানে, John এবং Alice নামের রেকর্ডগুলোর মধ্যে সম্পর্ক তৈরি করা হয়েছে। Inner Join শুধুমাত্র সেসব রেকর্ড দেখাবে যেগুলোর দুটি টেবিলেই মিল আছে।


২. Outer Join

Outer Join (বা Full Outer Join) হল একটি Join অপারেশন যা দুটি টেবিলের সব রেকর্ডকে যুক্ত করে, এবং যেখানে মিল না পাওয়া যায় সেখানে NULL মান প্রদান করে। Outer Join তিন ধরনের হতে পারে:

  • Left Outer Join: বাম টেবিলের সব রেকর্ড এবং ডান টেবিলের মেলানো রেকর্ডগুলি।
  • Right Outer Join: ডান টেবিলের সব রেকর্ড এবং বাম টেবিলের মেলানো রেকর্ডগুলি।
  • Full Outer Join: উভয় টেবিলের সব রেকর্ড, যেখানে মিল না পাওয়া যায় সেখানে NULL প্রদান করা হয়।

উদাহরণ:

# Left Outer Join
df_left_outer = df1.join(df2, df1.Name == df2.Name, "left_outer")
df_left_outer.show()

# Right Outer Join
df_right_outer = df1.join(df2, df1.Name == df2.Name, "right_outer")
df_right_outer.show()

# Full Outer Join
df_full_outer = df1.join(df2, df1.Name == df2.Name, "outer")
df_full_outer.show()

আউটপুট:

Left Outer Join:

+-----+---+--------+-------+
| Name|Age|    Name|Department|
+-----+---+--------+-------+
| John| 30|    John|       HR|
|Alice| 25|   Alice|  Finance|
| Bob| 35|    null|     null|
+-----+---+--------+-------+

Right Outer Join:

+-----+---+--------+---------+
| Name|Age|    Name|Department|
+-----+---+--------+---------+
| John| 30|    John|       HR|
|Alice| 25|   Alice|   Finance|
| null|null|Charlie|       IT|
+-----+---+--------+---------+

Full Outer Join:

+-----+---+--------+---------+
| Name|Age|    Name|Department|
+-----+---+--------+---------+
| John| 30|    John|       HR|
|Alice| 25|   Alice|   Finance|
| Bob| 35|    null|     null|
| null|null|Charlie|       IT|
+-----+---+--------+---------+

৩. Cross Join

Cross Join হল একটি Join টাইপ যা দুটি টেবিলের প্রত্যেকটি রেকর্ডের সাথে অন্য টেবিলের প্রতিটি রেকর্ড মেলাতে থাকে। এটি Cartesian Product তৈরি করে, যা সাধারণত বড় ডেটাসেটে খুবই ব্যয়বহুল এবং কম্পিউটেশনালভাবে খরচসাপেক্ষ হতে পারে।

উদাহরণ:

# Cross Join
df_cross = df1.crossJoin(df2)
df_cross.show()

আউটপুট:

+-----+---+-----+--------+
| Name|Age| Name|Department|
+-----+---+-----+--------+
| John| 30| John|       HR|
| John| 30|Alice|   Finance|
| John| 30|Charlie|    IT|
|Alice| 25| John|       HR|
|Alice| 25|Alice|   Finance|
|Alice| 25|Charlie|    IT|
|  Bob| 35| John|       HR|
|  Bob| 35|Alice|   Finance|
|  Bob| 35|Charlie|    IT|
+-----+---+-----+--------+

এখানে, df1 এবং df2 টেবিলের প্রত্যেকটি রেকর্ড একে অপরের সাথে মিশিয়ে Cartesian Product তৈরি করা হয়েছে।


৪. Semi Join

Semi Join হল একটি বিশেষ ধরনের Join যেখানে মূল কোয়ারির টেবিল থেকে ডেটা ফিরিয়ে আনা হয়, কিন্তু এটি শুধুমাত্র সেসব রেকর্ড দেখাবে যেগুলোর মিল ডান টেবিলের সাথে রয়েছে। তবে, Semi Join-এ ডান টেবিলের কলামগুলো ফিরিয়ে আনা হয় না, কেবলমাত্র বাম টেবিলের রেকর্ড রিটার্ন করা হয়।

উদাহরণ:

# Semi Join
df_semi = df1.join(df2, df1.Name == df2.Name, "left_semi")
df_semi.show()

আউটপুট:

+-----+---+
| Name|Age|
+-----+---+
| John| 30|
|Alice| 25|
+-----+---+

এখানে, Semi Join শুধুমাত্র df1 টেবিলের সেই রেকর্ডগুলো ফিরিয়ে দিয়েছে যেগুলোর মিল df2 টেবিলের সাথে রয়েছে। Bob নামের রেকর্ডটি এখানে বাদ পড়েছে কারণ এটি df2 টেবিলের সাথে মেলে না।


পারফরম্যান্সে প্রভাব

  • Inner Join সাধারণত দ্রুত হয়, কারণ এটি শুধুমাত্র মিল থাকা রেকর্ডগুলো ফিরিয়ে দেয়।
  • Outer Joins (Left, Right, Full) কিছুটা ধীর হতে পারে কারণ এটি NULL মান যুক্ত করে, এবং এতে বেশি ডেটা প্রসেস করা হয়।
  • Cross Join সবচেয়ে বেশি ব্যয়বহুল, কারণ এটি Cartesian Product তৈরি করে, যার ফলে ডেটার পরিমাণ ব্যাপকভাবে বৃদ্ধি পায়।
  • Semi Join পারফরম্যান্সের জন্য কার্যকরী হতে পারে কারণ এটি শুধুমাত্র বাম টেবিলের রেকর্ড ফিরিয়ে দেয়, যা মেমরি এবং কম্পিউটেশনাল রিসোর্সের সাশ্রয়ী।

সারাংশ

Spark SQL-এ Joins (Inner, Outer, Cross, Semi) ডেটার মধ্যে সম্পর্ক তৈরি করার জন্য একটি শক্তিশালী টুল। Inner Join শুধুমাত্র মিল থাকা রেকর্ডগুলো ফিরিয়ে দেয়, Outer Join উভয় টেবিলের সমস্ত রেকর্ডকে একত্রিত করে, Cross Join Cartesian Product তৈরি করে এবং Semi Join শুধুমাত্র বাম টেবিলের রেকর্ডগুলোর সাথে মিল থাকা রেকর্ডগুলো দেখায়। প্রতিটি Join-এর পারফরম্যান্স ডেটাসেটের আকার এবং Join টাইপের উপর নির্ভর করে। Cross Join সেভাবে ব্যবহৃত হলে পারফরম্যান্সে নেতিবাচক প্রভাব ফেলতে পারে, কিন্তু অন্যান্য Join অপারেশনগুলো সাধারণত দ্রুত এক্সিকিউট হয়।

Content added By
Promotion

Are you sure to start over?

Loading...