पाठ 17 / 25
Join रणनीतियाँ और Broadcast Joins
छोटी dimensions के लिए broadcast hash join चुनें और sort-merge डिफ़ॉल्ट समझें।
बड़ी ओर का shuffle बचाएँ
Spark भौतिक join रणनीति चुनता है। Broadcast hash join छोटी table को (spark.sql.autoBroadcastJoinThreshold से नीचे, डिफ़ॉल्ट 10 MB, या F.broadcast hint से) हर executor तक कॉपी करता है ताकि बड़ी table कभी shuffle न हो: सबसे तेज़, पर छोटी ओर driver और हर executor की memory में आनी चाहिए। Sort-merge join दो बड़ी tables के लिए डिफ़ॉल्ट है: दोनों ओर join key से shuffle और sort होती हैं। Shuffle hash join प्रति partition hash tables बनाता है। Joins तेज़ करने के लिए: join से पहले filter और select करें, छोटी dimensions broadcast करें, जहाँ संभव हो integer keys पर join करें, skew सँभालें, और ऐसी expressions पर join से बचें जो अनुकूलन रोकती हैं। AQE के साथ Spark एक ओर छोटी निकलने पर run के समय broadcast join में बदल सकता है।
Broadcast का hint (उदाहरण)
दोनों रूप Spark से dim_customers broadcast करने को कहते हैं। पिछले खंड के plan में नतीजे का BroadcastHashJoin दिखा था।
from pyspark.sql import functions as F
result = fact_orders.join(F.broadcast(dim_customers), "customer_id", "left")
# SQL hint form
spark.sql("""
SELECT /*+ BROADCAST(c) */ o.*, c.tier
FROM fact_orders o LEFT JOIN dim_customers c ON o.customer_id = c.customer_id
""")बड़ी चीज़ broadcast न करें
जो table executor memory में नहीं आती उसे broadcast करने से out-of-memory विफलताएँ आती हैं। उसका आकार जाँचें, और अनिश्चित हों तो डिफ़ॉल्ट join चुनें।
त्वरित जाँच: Broadcast join का मुख्य लाभ क्या है?
- यह किसी भी table आकार के लिए चलता है
- यह दोनों tables sort करता है
- बड़ी table को shuffle नहीं करना पड़ता
- यह दोहराव हटाता है
Answer
बड़ी table को shuffle नहीं करना पड़ता — छोटी table को हर जगह भेजना महँगे shuffle की जगह सस्ता स्थानीय lookup रखता है।