मैंने कई एसक्यूएल प्रश्नों को कोड करने के लिए काफी समय बिताया जो पहले R
स्क्रिप्ट के लिए डेटा लाने के लिए उपयोग किए जाते थे। क्यों डेटाबेस में ही इस समस्या का समाधान नहीं करता है में VIEW
रों बनाने - यह है कि यह कैसेस्कैला और स्पार्क: एसक्यूएल स्टेटमेंट रीसाइक्लिंग
sqlContent = readSQLFile("file1.sql")
sqlContent = setSQLVariables(sqlContent, variables)
results = executeSQL(sqlContent)
सुराग है, कि काम कुछ क्वेरी के लिए एक पूर्व क्वेरी से एक परिणाम के लिए आवश्यक है। Spark 2.0
के साथ मैं पहले से ही सिर्फ इतना है कि करने के लिए एक तरीका खोज निकाला माध्यम
// create a dataframe using a jdbc connection to the database
val tableDf = spark.read.jdbc(...)
var tempTableName = "TEMP_TABLE" + java.util.UUID.randomUUID.toString.replace("-", "").toUpperCase
var sqlQuery = Source.fromURL(getClass.getResource("/sql/" + sqlFileName)).mkString
sqlQuery = setSQLVariables(sqlQuery, sqlVariables)
sqlQuery = sqlQuery.replace("OLD_TABLE_NAME",tempTableName)
tableDf.createOrReplaceTempView(tempTableName)
var data = spark.sql(sqlQuery)
लेकिन यह मेरी विनम्र राय में बहुत बारीकियों है। इसके अलावा, अधिक जटिल प्रश्न, उदा। पूछताछ कि वर्तमान में subquery फैक्टरिंग incooporate काम नहीं करते हैं। वहाँ की तरह एक और अधिक मजबूत तरीका है फिर से लागू करने filter($"")
का उपयोग कर Spark.SQL
कोड में SQL कोड, .select($"")
, आदि
समग्र लक्ष्य कई org.apache.spark.sql.DataFrame
रों प्राप्त करने के लिए, हर एक पूर्व एसक्यूएल क्वेरी के परिणामों का प्रतिनिधित्व (जो हमेशा कुछ JOIN
एस, WITH
एस, आदि)। तो n
प्रश्न n
DataFrame
एस के लिए अग्रणी हैं।
क्या प्रदान किए गए दो से बेहतर विकल्प है?
सेटअप: Hadoop v.2.7.3
, स्पार्क 2.0.0
, खुफिया जम्मू आईडिया 2016.2
, स्काला 2.11.8
, Testcluster Win7 कार्य केंद्र पर
मुझे पूरी तरह से यह नहीं मिला। आपके पास एकल एसक्यूएल फ़ाइल में कई प्रश्न हैं और आप अंत में TempView के रूप में प्रत्येक क्वेरी को पंजीकृत करना चाहते हैं? या एकाधिक एसक्यूएल फाइलें, प्रत्येक एक प्रश्न के साथ और प्रत्येक क्वेरी एक TempView पंजीकरण? मुझे प्रश्न में समस्या नहीं दिख रही है। –
उत्तरार्द्ध, धन्यवाद! मैंने इसे स्पष्ट करने के लिए कुछ infos जोड़ा। – Boern
ठीक है, तो आप n sql फ़ाइलों से डेटाफ्रेम चाहते हैं। यह आपके द्वारा जोड़े गए कोड में पहले ही हल हो गया है। आपके समाधान में "झुकाव" क्या है, आपको "बेहतर" समाधान की आवश्यकता क्यों है - उत्तर को अनुकूलित करने के लिए क्या करना चाहिए? –