पाठ 9 / 25

Spark SQL और Temporary Views

Views से SQL और DataFrame API को आज़ादी से मिलाएँ।

SQL और DataFrames एक ही engine हैं

df.createOrReplaceTempView("orders") DataFrame को अस्थायी view के रूप में दर्ज करता है जिसे आप spark.sql("SELECT ...") से query कर सकते हैं। नतीजा एक और DataFrame है, इसलिए जहाँ जो स्पष्ट हो वहाँ SQL और DataFrame API के बीच बदल सकते हैं। दोनों को वही Catalyst optimizer उसी तरह की योजना में संकलित करता है, इसलिए आम तौर पर performance में अंतर नहीं। SQL analysts और जटिल aggregations के लिए सुविधाजनक है; DataFrame API कोड में जोड़ना, test करना और refactor करना आसान है।

पढ़ें, query करें, लिखें

Spark कई formats पढ़ता-लिखता है; analytics के लिए partitioning के साथ Parquet आम चुनाव है।

तीन चरण: पढ़ें, query करें, लिखें।
चित्र 3.1 — पढ़ें, query करें और लिखें।

DataFrame पर SQL, चलाकर

मैंने यह Apache Spark 4.0.0 (PySpark, local mode, official Docker image में) पर चलाया। प्रति शहर revenue, सबसे ऊँचा पहले। दिल्ली 430.0 पहले आता है; मुंबई का revenue null है (उसका अकेला amount null है) और यहाँ अवरोही क्रम में आख़िर में आता है।

orders.createOrReplaceTempView("orders")
spark.sql("SELECT city, SUM(amount) AS revenue FROM orders GROUP BY city ORDER BY revenue DESC").show()

Output:

+------+-------+
|  city|revenue|
+------+-------+
| delhi|  430.0|
|  pune|  320.0|
|mumbai|   NULL|
+------+-------+

Views के नाम स्पष्ट रखें

अस्थायी views सिर्फ़ मौजूदा session तक रहते हैं। जॉब्स में साझा tables के लिए catalog table (जैसे Hive metastore, Unity Catalog या Iceberg/Delta catalog) उपयोग करें।

त्वरित जाँच: `spark.sql("SELECT ...")` क्या लौटाता है?

  • एक pandas फ़ाइल
  • एक string
  • एक DataFrame
  • कुछ नहीं
Answer

एक DataFrame — SQL के नतीजे DataFrames हैं और आगे transformations में जा सकते हैं।