पाठ 4 / 25

RDDs, DataFrames और Spark SQL

निम्न-स्तर के RDD API और अनुकूलित DataFrame API में चुनें।

DataFrames चुनें

मूल abstraction RDD (resilient distributed dataset) है: मनमाने objects का वितरित संग्रह, जिसे map और reduceByKey जैसे functions से प्रोसेस किया जाता है। DataFrame नामित, typed columns वाली वितरित table है, pandas DataFrame या SQL table जैसी, और Spark SQL का Catalyst optimizer उसका विश्लेषण कर सकता है, ऑपरेशनों का क्रम बदल सकता है, columns छाँट सकता है और कुशल join रणनीतियाँ चुन सकता है, जो RDDs पर अपारदर्शी Python functions के लिए नहीं कर सकता। लगभग हर चीज़ के लिए DataFrames और SQL उपयोग करें; RDDs सिर्फ़ निम्न-स्तर नियंत्रण या असंरचित डेटा के लिए लें।

RDD पर क्लासिक word count, चलाकर

मैंने यह Apache Spark 4.0.0 (PySpark, local mode, official Docker image में) पर चलाया। reduceByKey partitions भर में प्रति शब्द गिनती जोड़ता है। स्थिर प्रदर्शन के लिए नतीजा यहाँ क्रमबद्ध है।

lines = spark.sparkContext.parallelize(["to be or not to be", "to see or not to see"])
counts = lines.flatMap(lambda l: l.split()).map(lambda w: (w, 1)).reduceByKey(lambda a, b: a + b)
print(sorted(counts.collect()))

Output:

[('be', 2), ('not', 2), ('or', 2), ('see', 2), ('to', 4)]

वही डेटा DataFrame schema के रूप में, चलाकर

मैंने यह Apache Spark 4.0.0 (PySpark, local mode, official Docker image में) पर चलाया। Columns के नाम और types हैं, रूपांतरण के बाद सही date समेत, और हर field nullable है।

orders.printSchema()

Output:

root
 |-- order_id: long (nullable = true)
 |-- customer: string (nullable = true)
 |-- city: string (nullable = true)
 |-- amount: double (nullable = true)
 |-- order_date: date (nullable = true)

त्वरित जाँच: Raw RDDs की जगह DataFrames क्यों चुनें?

  • RDDs अब मौजूद नहीं
  • Catalyst optimizer DataFrame ऑपरेशनों की कुशल योजना बना सकता है
  • DataFrames कभी memory उपयोग नहीं करते
  • RDDs समानांतर नहीं चल सकते
Answer

Catalyst optimizer DataFrame ऑपरेशनों की कुशल योजना बना सकता है — नामित columns और घोषणात्मक ऑपरेशन Spark को पूरी query अनुकूलित करने देते हैं।