पाठ 7 / 25

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 दिखाता है।

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 अनोखी नहीं थी।

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

  • left outer join
  • inner join
  • left anti join
  • बिना keys का cross join
Answer

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