# Joins — Apache Spark: DataFrames से Big Data Processing

Source: https://www.geekswithgeeks.com/hi/spark/df-joins

> DataFrames join करें, join का प्रकार चुनें और अनजाने में rows बढ़ने से बचें।

## Key पर rows मिलाएँ

`df.join(other, "customer", "left")` एक key साझा करने वाली rows जोड़ता है। Join प्रकार: **inner** (सिर्फ़ मेल), **left/right/full outer** (एक या दोनों ओर की बेमेल rows रखते हैं, दूसरी ओर null भरकर), **left semi** (बाईं ओर की वे rows जिनका मेल है, बिना columns जोड़े) और **left anti** (बाईं ओर की वे rows जिनका मेल नहीं)। Joins सबसे महँगा आम ऑपरेशन हैं क्योंकि मिलती keys को साथ लाने के लिए डेटा **shuffle** करना पड़ सकता है। दो जाल: **अ-अनोखी key** पर join rows गुणा कर देता है (many-to-many), और **nulls** वाले column पर join उन्हें कभी नहीं मिलाता। पहले और बाद में row गिनती जाँचें।

## Left join, चलाकर

मैंने यह Apache Spark 4.0.0 (PySpark, local mode, official Docker image में) पर चलाया। Order 6 (Kiran) का कोई मेल वाला tier नहीं है, इसलिए left join पंक्ति रखता है और `tier` के लिए `NULL` दिखाता है।

```python
cust = spark.createDataFrame([("asha", "gold"), ("ravi", "silver"), ("meera", "bronze")], ["customer", "tier"])
orders.join(cust, "customer", "left").select("order_id", "customer", "tier").orderBy("order_id").show()
```

Output:

```
+--------+--------+------+
|order_id|customer|  tier|
+--------+--------+------+
|       1|    asha|  gold|
|       2|    ravi|silver|
|       3|    asha|  gold|
|       4|   meera|bronze|
|       5|    ravi|silver|
|       6|   kiran|  NULL|
+--------+--------+------+
```

## स्पष्ट keys पर join करें

Join से पहले और बाद में rows गिनें, और स्पष्ट column सूचियों के साथ `df1.join(df2, ["a", "b"], "inner")` उपयोग करें। अनपेक्षित वृद्धि का आम तौर पर मतलब है कि "अनोखी" key अनोखी नहीं थी।

**Quiz:** कौन-सा join बाएँ DataFrame की हर row रखता है, मेल न होने पर nulls के साथ?

- [x] left outer join
- [ ] inner join
- [ ] left anti join
- [ ] बिना keys का cross join

*Answer:* left outer join. Left outer join बेमेल बाईं rows को सुरक्षित रखता है और दाईं ओर के columns null से भरता है।
