स्पार्क एसक्यूएल - डाटाफ्रेम
डेटाफ़्रेम डेटा का एक वितरित संग्रह है, जिसे नामित कॉलम में व्यवस्थित किया जाता है। वैचारिक रूप से, यह अच्छी अनुकूलन तकनीकों के साथ संबंधपरक तालिकाओं के बराबर है।
एक DataFrame का निर्माण विभिन्न स्रोतों जैसे Hive तालिकाओं, संरचित डेटा फ़ाइलों, बाहरी डेटाबेस, या मौजूदा RDBs की एक सरणी से किया जा सकता है। यह एपीआई आधुनिक बिग डेटा और डेटा विज्ञान अनुप्रयोगों से प्रेरणा लेने के लिए डिज़ाइन किया गया थाDataFrame in R Programming तथा Pandas in Python।
DataFrame की विशेषताएं
यहाँ DataFrame की कुछ विशिष्ट विशेषताओं का एक सेट है -
एक नोड नोडल पर बड़े क्लस्टर के लिए पेटोबाइट्स को किलोबाइट्स के आकार में डेटा को संसाधित करने की क्षमता।
विभिन्न डेटा प्रारूपों (एवरो, सीएसवी, इलास्टिक सर्च, और कैसेंड्रा) और स्टोरेज सिस्टम (एचडीएफएस, एचआईईवी टेबल, मायस्कल, आदि) का समर्थन करता है।
स्पार्क एसक्यूएल उत्प्रेरक उत्प्रेरक (पेड़ परिवर्तन ढांचे) के माध्यम से कला अनुकूलन और कोड पीढ़ी की स्थिति।
स्पार्क-कोर के माध्यम से सभी बिग डेटा टूल और फ्रेमवर्क के साथ आसानी से एकीकृत किया जा सकता है।
पायथन, जावा, स्काला और आर प्रोग्रामिंग के लिए एपीआई प्रदान करता है।
SQLContext
SQLContext एक वर्ग है और इसका उपयोग स्पार्क SQL की कार्यप्रणाली को शुरू करने के लिए किया जाता है। SQLContext क्लास ऑब्जेक्ट को इनिशियलाइज़ करने के लिए SparkContext क्लास ऑब्जेक्ट (sc) की आवश्यकता होती है।
स्पार्क-शेल के माध्यम से स्पार्ककॉन्टेक्स को आरंभ करने के लिए निम्न कमांड का उपयोग किया जाता है।
$ spark-shell
डिफ़ॉल्ट रूप से, SparkContext ऑब्जेक्ट को नाम के साथ प्रारंभ किया जाता है sc जब स्पार्क-शेल शुरू होता है।
SQLContext बनाने के लिए निम्न कमांड का उपयोग करें।
scala> val sqlcontext = new org.apache.spark.sql.SQLContext(sc)
उदाहरण
आइए एक JSON फ़ाइल नामक कर्मचारी रिकॉर्ड के उदाहरण पर विचार करें employee.json। एक DataFrame (df) बनाने के लिए निम्न कमांड का उपयोग करें और एक JSON नाम का दस्तावेज़ पढ़ेंemployee.json निम्नलिखित सामग्री के साथ।
employee.json - इस फाइल को उस डायरेक्टरी में रखें जहां करंट है scala> पॉइंटर स्थित है।
{
{"id" : "1201", "name" : "satish", "age" : "25"}
{"id" : "1202", "name" : "krishna", "age" : "28"}
{"id" : "1203", "name" : "amith", "age" : "39"}
{"id" : "1204", "name" : "javed", "age" : "23"}
{"id" : "1205", "name" : "prudvi", "age" : "23"}
}
DataFrame संचालन
DataFrame संरचित डेटा हेरफेर के लिए एक डोमेन-विशिष्ट भाषा प्रदान करता है। यहां, हम DataFrames का उपयोग करके संरचित डेटा प्रोसेसिंग के कुछ बुनियादी उदाहरणों को शामिल करते हैं।
DataFrame संचालन करने के लिए नीचे दिए गए चरणों का पालन करें -
JSON दस्तावेज़ पढ़ें
सबसे पहले, हमें JSON दस्तावेज़ पढ़ना होगा। इसके आधार पर, एक DataFrame नाम (dfs) जेनरेट करें।
JSON नाम के दस्तावेज़ को पढ़ने के लिए निम्नलिखित कमांड का उपयोग करें employee.json। डेटा को फ़ील्ड के साथ तालिका के रूप में दिखाया गया है - आईडी, नाम और आयु।
scala> val dfs = sqlContext.read.json("employee.json")
Output - फ़ील्ड नामों को स्वचालित रूप से लिया जाता है employee.json।
dfs: org.apache.spark.sql.DataFrame = [age: string, id: string, name: string]
डेटा दिखाएं
यदि आप डेटा को डेटाफ़्रेम में देखना चाहते हैं, तो निम्न कमांड का उपयोग करें।
scala> dfs.show()
Output - आप कर्मचारी डेटा को एक सारणीबद्ध प्रारूप में देख सकते हैं।
<console>:22, took 0.052610 s
+----+------+--------+
|age | id | name |
+----+------+--------+
| 25 | 1201 | satish |
| 28 | 1202 | krishna|
| 39 | 1203 | amith |
| 23 | 1204 | javed |
| 23 | 1205 | prudvi |
+----+------+--------+
PrintSchema विधि का उपयोग करें
यदि आप DataFrame की संरचना (स्कीमा) को देखना चाहते हैं, तो निम्न कमांड का उपयोग करें।
scala> dfs.printSchema()
Output
root
|-- age: string (nullable = true)
|-- id: string (nullable = true)
|-- name: string (nullable = true)
चयन विधि का उपयोग करें
लाने के लिए निम्न आदेश का उपयोग करें nameDataFrame से तीन कॉलमों के बीच कॉलम।
scala> dfs.select("name").show()
Output - आप के मूल्यों को देख सकते हैं name स्तंभ।
<console>:22, took 0.044023 s
+--------+
| name |
+--------+
| satish |
| krishna|
| amith |
| javed |
| prudvi |
+--------+
आयु फ़िल्टर का उपयोग करें
उन कर्मचारियों को खोजने के लिए निम्नलिखित आदेश का उपयोग करें जिनकी आयु 23 से अधिक है (आयु> 23)।
scala> dfs.filter(dfs("age") > 23).show()
Output
<console>:22, took 0.078670 s
+----+------+--------+
|age | id | name |
+----+------+--------+
| 25 | 1201 | satish |
| 28 | 1202 | krishna|
| 39 | 1203 | amith |
+----+------+--------+
GroupBy विधि का उपयोग करें
उन कर्मचारियों की संख्या गिनने के लिए निम्नलिखित कमांड का उपयोग करें जो समान आयु के हैं।
scala> dfs.groupBy("age").count().show()
Output - दो कर्मचारियों की उम्र 23 साल है।
<console>:22, took 5.196091 s
+----+-----+
|age |count|
+----+-----+
| 23 | 2 |
| 25 | 1 |
| 28 | 1 |
| 39 | 1 |
+----+-----+
SQL Queries Programmatically चल रहा है
SQLContext SQL फ़ंक्शन चलाते समय SQL प्रश्नों को प्रोग्रामेटिक रूप से चलाने के लिए एप्लिकेशन को सक्षम करता है और डेटाफ़्रेम के रूप में परिणाम देता है।
आम तौर पर, बैकग्राउंड में स्पार्कक्यूडी मौजूदा RDDs को डेटाफ्रैम में परिवर्तित करने के लिए दो अलग-अलग तरीकों का समर्थन करता है -
अनु क्रमांक | तरीके और विवरण |
---|---|
1 | परावर्तन का उपयोग करके स्कीमा का संदर्भ देना यह विधि RDD के स्कीमा को उत्पन्न करने के लिए परावर्तन का उपयोग करती है जिसमें विशिष्ट प्रकार की वस्तुएँ होती हैं। |
2 | स्कीमा को प्रोग्रामेटिक रूप से निर्दिष्ट करना DataFrame बनाने की दूसरी विधि प्रोग्रामेटिक इंटरफ़ेस के माध्यम से है जो आपको एक स्कीमा बनाने की अनुमति देता है और फिर इसे मौजूदा RDD में लागू करता है। |